StringBuilder每次都会将内容附加到新行

Dar*_*ght 4 java stringbuilder

我正在构建一个验证内容,验证内容,然后以StringBuilder的形式发出警告(对于失败).在下面的代码中说我正在检查值paramX和paramY的下限.

 StringBuilder sb= new StringBuilder();

        if(paramX<10){
            sb.append("paramX cannot be less than 10 ");
        }

        if(paramY<20){
            sb.append("paramY cannot be less than 20 ");
        }

        System.out.println(sb);
Run Code Online (Sandbox Code Playgroud)

它给出的输出为:paramX不能小于10,参数不能小于20

但我想要输出,每个附加的字符串将打印在新行上.如下.

paramX cannot be less than 10 

paramY cannot be less than 20
Run Code Online (Sandbox Code Playgroud)

我使用了以下解决方法,但最终一次又一次地重复相同的代码(我不想这样做).

sb.append(System.getProperty("line.separator")); // Add Explicit line separator each time
sb.append("\n");
sb.append("paramX cannot be less than 10 \n");
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

Stu*_*ion 7

如果你不想一遍又一遍地做,那就写一个帮助方法:

public void appendString(StringBuilder builder, String value) {
    builder.append(value + System.lineSeparator());
}
Run Code Online (Sandbox Code Playgroud)

然后打电话:

if(paramX<10){
    appendString(sb, "paramX cannot be less than 10 ");
}
Run Code Online (Sandbox Code Playgroud)

这样,如果需要更改错误的输出格式,则只需要维护一个位置.


Dar*_*ght 6

只是想分享我用来实现相同结果的 jdk 8 的新功能。使用 StringJoiner 我们可以构造一个由分隔符分隔的字符序列。

StringJoiner formattedString= new StringJoiner("\n"); 
formattedString.add("XXX");
formattedString.add("YYY");
System.out.println(formattedString);  
Run Code Online (Sandbox Code Playgroud)


Hal*_*lex 5

另一种选择是使用 Apache Commons StrBuilder,它具有您正在寻找的功能。

StrBuilder.appendLn()