5

我正在构建一个验证例程来验证内容,然后以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");

有没有更简单的方法来做到这一点?

4

8 回答 8

7

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

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

然后调用:

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

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

于 2013-11-06T13:36:51.930 回答
5

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

StrBuilder.appendLn()

于 2015-12-03T18:01:45.550 回答
4

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

看看 Spring 验证是如何工作的:你有一个 Errors 对象来保存错误列表,以及一个单独的消息源对象,它为不同的错误填充用户可见的消息。

于 2013-11-06T13:38:30.957 回答
4

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

StringJoiner formattedString= new StringJoiner("\n"); 
formattedString.add("XXX");
formattedString.add("YYY");
System.out.println(formattedString);  
于 2018-07-30T10:28:12.070 回答
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);
于 2013-11-06T13:42:46.693 回答
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");
}
于 2013-11-06T13:36:53.180 回答
-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 ");
        }
于 2013-11-06T13:36:45.367 回答
-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 ");
}
于 2013-11-06T13:39:38.987 回答