ChatGPT解决这个技术问题 Extra ChatGPT

如何将换行符附加到 StringBuilder

我有一个 StringBuilder 对象,

StringBuilder result = new StringBuilder();
result.append(someChar);

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

result.append("/n"); 

不工作。因此,我正在考虑使用 Unicode 编写换行符。这会有帮助吗?如果是这样,我该如何添加一个?

我以为是 "\n"System.getProperty("line.separator")
newline 不一定是 LINE FEED (LF) (Ascii/Unicode 10) 字符。正如 correct answer 所指出的,在 Java 中,您可以获得其中一个(LINE FEED 或特定于平台的换行符)。

J
Jayamohan

它应该是

r.append("\n");

但我建议你做如下,

r.append(System.getProperty("line.separator"));

System.getProperty("line.separator") 在 java 中为您提供系统相关的换行符。同样来自 Java 7 的还有一个直接返回值的方法:System.lineSeparator()


+1 System.lineSeparator 快捷方式。更大的问题是为什么没有 StringBuilder#appendLine() 方法。
System.lineSeparator() 文档提到“返回与系统相关的行分隔符字符串。”。这与平台无关。如果您需要编写底层操作系统将使用的字符串,请使用此代码,否则使用 '\n'
@tuscland - 为什么不一直使用 System.lineSeparator() ?为什么 '\n' 是一个更好的默认选项?
不,当您处理不可移植的资源(即特定于底层操作系统的资源)时,应该使用 System.lineSeparator()。无论您在 Windows (\r\n) 或 Unix (\n) 上运行 Java,它都有不同的值。如果您一直使用 System.lineSeparator(),您将因此产生不可移植的文件。
令人难以置信的是,StringBuilder 上还没有 appendLine 过载。
C
Charles Giguere

另一种选择是使用 Apache Commons StrBuilder,它具有 StringBuilder 所缺乏的功能。

StrBuilder.appendLn()

从 3.6 版开始,StrBuilder 已被弃用,取而代之的是具有相同功能的 TextStringBuilder


...并且从 Java 8 开始有 StringJoiner,它“用于构造由分隔符分隔的字符序列,并且可以选择以提供的前缀开头并以提供的后缀结尾。”使用“ \n" 作为分隔符将导致新行(最后一行除外)。在内部,它使用 StringBuilder。我假设使用 Google Guava Joiner 可以实现相同的方法。
...现在是 deprecated。请使用 org.apache.commons.text.TextStringBuilder
TextStringBuilder 不在 commons-lang3 中,它在 commons-text commons.apache.org/proper/commons-text
n
nhahtdh

应该使用 \ 而不是 / 进行转义。

因此 r.append('\n');r.append("\n"); 将起作用(StringBuilder 具有 charString 类型的重载方法)。


K
K.S

我创建了类似于 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

I
Illep

您可以使用 line.seperator


o
ostrichofevil

您还可以在 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."));

B
Boc Dev

除了 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();

s
sunadorer

对于 Kotlin,

StringBuilder().appendLine("your text");

虽然这是一个 java 问题,但这也是 Kotlin 的第一个 google 结果,可能会派上用场。


该问题被标记在“java”下。无需发布甚至与问题相关的语言都没有的解决方案。
@chntgomez 我在 Kotlin 中寻找一种将换行符附加到 StringBuilder 的方法,并找到了这个:-)
我看到了这个并错过了“这是为 Kotlin 准备的”并在 Java 中进行了尝试。这就是你不这样做的原因。没有帮助。