如何在StringBuilder中附加换行符

Ill*_*lep 221 java stringbuilder

我有一个StringBuilder对象,

StringBuilder result = new StringBuilder();
result.append(someChar);
Run Code Online (Sandbox Code Playgroud)

现在我想在其中添加一个换行符StringBuilder.我该怎么做?

result.append("/n"); 
Run Code Online (Sandbox Code Playgroud)

不行.所以,我正在考虑使用Unicode编写换行符.这会有帮助吗?如果是这样,我该如何添加?

Jay*_*han 481

它应该是

r.append("\n");
Run Code Online (Sandbox Code Playgroud)

但我建议你这样做,

r.append(System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)

System.getProperty("line.separator")在java中为您提供依赖于系统的换行符.同样来自Java 7,有一种直接返回值的方法:System.lineSeparator()

  • System.lineSeparator快捷方式的+1.更大的问题是为什么没有`StringBuilder#appendLine()`方法. (78认同)
  • 不,当您处理非可移植资源(即特定于底层操作系统的资源)时,应该使用`System.lineSeparator()`.它在Windows(\ r \n)或Unix(\n)上运行Java时具有不同的值.如果你一直使用`System.lineSeparator()`,那么你将生成不可移植的文件. (16认同)
  • `System.lineSeparator()`文档提到"返回依赖于系统的行分隔符字符串.".这不是平台独立的.如果需要编写将由底层操作系统使用的字符串,请使用此代码,否则使用`'\n'`. (13认同)
  • 令人难以置信的是,`StringBuilder`上还没有`appendLine`重载. (5认同)
  • @tuscland-为什么不一直使用System.lineSeparator()?为什么'\ n'是更好的默认选项? (2认同)

Hal*_*lex 19

另一个选择是使用Apache Commons StrBuilder,它具有StringBuilder中缺少的功能.

StrBuilder.appendLn()

  • ...从Java 8开始,有[StringJoiner](https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html),其中"_用于构造一系列字符分隔通过分隔符并可选地以提供的前缀开头并以提供的后缀结束."使用"\n"作为分隔符将导致换行(除了最后一行).在内部,它使用StringBuilder.我假设使用Google Guava Joiner可以实现相同的方法. (4认同)

nha*_*tdh 16

逃避应该用\,而不是/.

所以r.append('\n');r.append("\n");将会工作(StringBuilder有重载的方法charString类型).


K.S*_*K.S 7

我创建了类似于 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

StringBuilderPlus sb = new StringBuilderPlus();
sb.appendLine("aaaaa");
sb.appendLine("bbbbb");
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)

安慰:

aaaaa
bbbbb
Run Code Online (Sandbox Code Playgroud)


小智 5

String.format您还可以在(请参阅)中使用行分隔符java.util.Formatter,这也是与平台无关的。

IE:

result.append(String.format("%n", ""));
Run Code Online (Sandbox Code Playgroud)

如果您需要添加更多行间距,只需使用:

result.append(String.format("%n%n", ""));
Run Code Online (Sandbox Code Playgroud)

您还可以使用它StringFormat来格式化整个字符串,并在末尾添加换行符。

result.append(String.format("%10s%n%n", "This is my string."));
Run Code Online (Sandbox Code Playgroud)