我有一个StringBuilder
对象,
StringBuilder result = new StringBuilder();
result.append(someChar);
现在我想向StringBuilder
追加一个新的换行符。我该如何做?
result.append("/n");
无效。所以,我在考虑使用Unicode编写一个换行符。这样会有帮助吗?如果可以,我该如何添加一个?
我有一个StringBuilder
对象,
StringBuilder result = new StringBuilder();
result.append(someChar);
现在我想向StringBuilder
追加一个新的换行符。我该如何做?
result.append("/n");
无效。所以,我在考虑使用Unicode编写一个换行符。这样会有帮助吗?如果可以,我该如何添加一个?
它应该是
r.append("\n");
但我建议你按照以下方式操作:
r.append(System.getProperty("line.separator"));
System.getProperty("line.separator")
在Java中可以获取与系统相关的换行符。从Java 7开始,还有一种方法可以直接返回该值:System.lineSeparator()
StringBuilder#appendLine()
方法。 - Patrick MSystem.lineSeparator()
方法的文档中提到“返回与系统相关的换行符字符串”。这不是跨平台的。如果您需要编写一个将被底层操作系统使用的字符串,请使用此代码,否则请使用'\n'
。 - tusclandSystem.lineSeparator()
。它在Windows(\r\n)或Unix(\n)上运行Java时具有不同的值。如果您始终使用System.lineSeparator()
,则会生成非可移植文件。 - tusclandStringBuilder
上还没有 appendLine
的重载。 - Josh M.另一个选项是使用Apache Commons StrBuilder,它具有StringBuilder缺少的功能。
从3.6版本开始,StrBuilder已被弃用,推荐使用TextStringBuilder,它具有相同的功能。
org.apache.commons.text.TextStringBuilder
。 - Ashok M ATextStringBuilder
不在 commons-lang3
库中,而是在 commons-text
库中。请访问 https://commons.apache.org/proper/commons-text/。 - Salvatorelab转义应该使用\
,而不是/
。
所以r.append('\n');
或r.append("\n");
都可以使用(StringBuilder
具有重载的方法,用于char
和String
类型)。
我创建了一个类,类似于StringBuilder,并且可以通过调用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
String.format
中使用行分隔符字符(请参见 java.util.Formatter
),这也是与平台无关的。result.append(String.format("%n", ""));
result.append(String.format("%n%n", ""));
您还可以使用StringFormat
来格式化整个字符串,在结尾处加上换行符。
result.append(String.format("%10s%n%n", "This is my string."));
line.seperator
来添加新行。除了K.S提出的创建StringBuilderPlus类并利用适配器模式扩展最终类的响应外,如果你利用泛型并在新的append和appendLine方法中返回StringBuilderPlus对象,你可以利用StringBuilders的许多追加方法来处理所有不同类型的字符串,同时恢复将多个追加命令拼接成一个字符串的能力,如下所示:
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;
}
}
StringBuilderPlus stringBuilder = new StringBuilderPlus();
stringBuilder.appendLine("test")
.appendLine('c')
.appendLine(1)
.appendLine(1.2)
.appendLine(1L);
stringBuilder.toString();
"\n"
,或System.getProperty("line.separator")
。 - Alvin Wong