我有一个 StringBuilder
对象,
StringBuilder result = new StringBuilder();
result.append(someChar);
现在我想在 StringBuilder
中添加一个换行符。我该怎么做?
result.append("/n");
不工作。因此,我正在考虑使用 Unicode 编写换行符。这会有帮助吗?如果是这样,我该如何添加一个?
"\n"
或 System.getProperty("line.separator")
。
它应该是
r.append("\n");
但我建议你做如下,
r.append(System.getProperty("line.separator"));
System.getProperty("line.separator")
在 java 中为您提供系统相关的换行符。同样来自 Java 7 的还有一个直接返回值的方法:System.lineSeparator()
另一种选择是使用 Apache Commons StrBuilder,它具有 StringBuilder 所缺乏的功能。
从 3.6 版开始,StrBuilder 已被弃用,取而代之的是具有相同功能的 TextStringBuilder
deprecated
。请使用 org.apache.commons.text.TextStringBuilder
。
应该使用 \
而不是 /
进行转义。
因此 r.append('\n');
或 r.append("\n");
将起作用(StringBuilder
具有 char
和 String
类型的重载方法)。
我创建了类似于 StringBuidler 的原始类,并且可以通过调用方法 appendLine(String str) 来追加行。
public class StringBuilderPlus {
private StringBuilder sb;
public StringBuilderPlus(){
sb = new StringBuilder();
}
public void append(String str)
{
sb.append(str != null ? str : "");
}
public void appendLine(String str)
{
sb.append(str != null ? str : "").append(System.getProperty("line.separator"));
}
public String toString()
{
return sb.toString();
}
}
用法:
StringBuilderPlus sb = new StringBuilderPlus();
sb.appendLine("aaaaa");
sb.appendLine("bbbbb");
System.out.println(sb.toString());
安慰:
aaaaa
bbbbb
您可以使用 line.seperator
在
您还可以在 String.format
中使用行分隔符(参见 java.util.Formatter
),这也是平台无关的。
IE:
result.append(String.format("%n", ""));
如果您需要添加更多行空格,只需使用:
result.append(String.format("%n%n", ""));
您还可以使用 StringFormat
来格式化整个字符串,并在末尾添加一个换行符。
result.append(String.format("%10s%n%n", "This is my string."));
除了 KS 响应创建 StringBuilderPlus 类并利用适配器模式扩展 final 类之外,如果您使用泛型并在新的 append 和 appendLine 方法中返回 StringBuilderPlus 对象,您可以利用 StringBuilders 的许多 append 方法对于所有不同的类型,同时重新获得将多个附加命令串在一起的能力,如下所示
public class StringBuilderPlus {
private final StringBuilder stringBuilder;
public StringBuilderPlus() {
this.stringBuilder = new StringBuilder();
}
public <T> StringBuilderPlus append(T t) {
stringBuilder.append(t);
return this;
}
public <T> StringBuilderPlus appendLine(T t) {
stringBuilder.append(t).append(System.lineSeparator());
return this;
}
@Override
public String toString() {
return stringBuilder.toString();
}
public StringBuilder getStringBuilder() {
return stringBuilder;
}
}
然后你可以像原来的 StringBuilder 类一样使用它:
StringBuilderPlus stringBuilder = new StringBuilderPlus();
stringBuilder.appendLine("test")
.appendLine('c')
.appendLine(1)
.appendLine(1.2)
.appendLine(1L);
stringBuilder.toString();
对于 Kotlin,
StringBuilder().appendLine("your text");
虽然这是一个 java 问题,但这也是 Kotlin 的第一个 google 结果,可能会派上用场。
StringBuilder#appendLine()
方法。System.lineSeparator()
文档提到“返回与系统相关的行分隔符字符串。”。这与平台无关。如果您需要编写底层操作系统将使用的字符串,请使用此代码,否则使用'\n'
。System.lineSeparator()
。无论您在 Windows (\r\n) 或 Unix (\n) 上运行 Java,它都有不同的值。如果您一直使用System.lineSeparator()
,您将因此产生不可移植的文件。StringBuilder
上还没有appendLine
过载。