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

时间:2013-11-06 13:31:08

标签: 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);

它给出的输出为: paramX不能小于10 paramY不能小于20

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

paramX cannot be less than 10 

paramY cannot be less than 20

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

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

有更简单的方法吗?

8 个答案:

答案 0 :(得分:7)

如果您不想一遍又一遍地执行此操作,请编写辅助方法:

public void appendString(StringBuilder builder, String value) {
    builder.append(value + System.lineSeparator());
}

然后致电:

if(paramX<10){
    appendString(sb, "paramX cannot be less than 10 ");
}

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

答案 1 :(得分:4)

简单的方法是保留错误列表,而不是随意连接它们。这将有助于保持逻辑错误与其呈现之间的关注点分离。

了解Spring验证的工作原理:您有一个Errors对象,用于保存错误列表,以及一个单独的消息源对象,用于填充用户可见消息中的不同错误。

答案 2 :(得分:4)

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

StrBuilder.appendLn()

答案 3 :(得分:2)

您可以尝试使用PrintStream,因为它具有自动添加新行的println(String string)方法。

像这样的东西。

ByteArrayOutputStream bos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(bos);
ps.println("Line 1");
ps.println("Line 2");
ps.flush();
String message = new String(bos.toByteArray());
System.out.println(message);

答案 4 :(得分:2)

只需考虑共享用于实现相同结果的jdk 8的新功能。 使用StringJoiner,我们可以构造由定界符分隔的字符序列。

$($(this).parents()[3]).find('.card-body').toggleClass('row-200')

答案 5 :(得分:1)

首先,您需要在每个\n的末尾包含换行符(.append()):

sb.append("paramX cannot be less than 10 \n");

至于重复换行逻辑,只需将其包装在一个方法中:

public void append(StringBuilder sb, Object value) {
    sb.append(value).append(System.getProperty("line.separator")).append('\n');
}

并使用它:

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

答案 6 :(得分:-1)

直接追加......

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

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

答案 7 :(得分:-1)

只需使用\n - 它随处可用。此外,如果有两个消息,您似乎想有条件地添加换行符:

StringBuilder sb = new StringBuilder();

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

if (paramY<20) {
    if (!sb.length() > 0) // only add newline if needed
        sb.append('\n');
    sb.append("paramY cannot be less than 20 ");
}