我有一个StringBuilder对象,
StringBuilder
StringBuilder result = new StringBuilder(); result.append(someChar);
现在我想给StringBuilder添加一个换行符。我该怎么做呢?
result.append("/n");
不管用。我在考虑用Unicode写一个换行符。这有用吗?如果有,我怎么添加一个?
转义应该用\完成,而不是/。
\
/
所以r.append('\n');或r.append("\n");可以工作(StringBuilder为char和String类型重载了方法)。
r.append('\n');
r.append("\n");
char
String
应该是这样
但我建议你这样做,
r.append(System.getProperty("line.separator"));
System.getProperty("line.separator")提供java中依赖于系统的换行符。Java 7中还有一个直接返回值的方法:System.lineSeparator()
System.getProperty("line.separator")
System.lineSeparator()
另一种选择是使用Apache Commons StrBuilder,它具有StringBuilder所缺乏的功能。
StrBuilder.appendLn() . appln (
从3.6版开始,StrBuilder已经被弃用,取而代之的是具有相同功能的TextStringBuilder
你可以使用line.seperator来添加新行
line.seperator
你也可以在String.format中使用行分隔符(参见java.util.Formatter),这也是平台不可知的。
String.format
java.util.Formatter
例如:
result.append(String.format("%n", ""));
如果你需要添加更多的行间距,只需使用:
result.append(String.format("%n%n", ""));
你也可以使用StringFormat来格式化你的整个字符串,在结尾加一个换行符。
StringFormat
result.append(String.format("%10s%n%n", "This is my 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
除了K.S的响应创建一个StringBuilderPlus类和利用适配器模式来扩展一个final类,如果你使用泛型并在新的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; } }
然后你可以像原始的StringBuilder类一样使用它:
StringBuilderPlus stringBuilder = new StringBuilderPlus(); stringBuilder.appendLine("test") .appendLine('c') .appendLine(1) .appendLine(1.2) .appendLine(1L); stringBuilder.toString();