如何为除最后一行之外的所有行追加换行符?

tro*_*yal 32 java foreach newline

我正在迭代HashMap(请参阅我之前的问题以获取更多详细信息)并构建一个由Map中包含的数据组成的字符串.对于每个项目,我将有一个新行,但对于最后一项,我不想要新行.我怎样才能做到这一点?我以为我可以这么检查,看看这个条目是否是最后一个,但我不确定如何实际做到这一点.

谢谢!

Jon*_*eet 71

将你的思维过程从"除了最后一次附加一个换行符"改为"除了第一次前置换行符":

boolean first = true;
StringBuilder builder = new StringBuilder();

for (Map.Entry<MyClass.Key,String> entry : data.entrySet()) {
    if (first) {
        first = false;
    } else {
        builder.append("\n"); // Or whatever break you want
    }
    builder.append(entry.key())
           .append(": ")
           .append(entry.value());
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我特别感谢思考过程的改变.我经常忘记有很多方法可以解决这些类型的问题(你认为我会更清楚). (2认同)

Joe*_*orn 69

一种方法(向Jon Skeet道歉,借用他的部分Java代码):

StringBuilder result = new StringBuilder();

string newline = "";  
for (Map.Entry<MyClass.Key,String> entry : data.entrySet())
{
    result.append(newline)
       .append(entry.key())
       .append(": ")
       .append(entry.value());

    newline = "\n";
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,确实非常好.我非常喜欢那个*.因此很容易注册更多用户进行更多次投票;) (9认同)

Jay*_* R. 13

那这个呢?

StringBuilder result = new StringBuilder();

for(Map.Entry<MyClass.Key,String> entry : data.entrySet())
{
    builder.append(entry.key())
       .append(": ")
       .append(entry.value())
       .append("\n");
}

return builder.substring(0, builder.length()-1);
Run Code Online (Sandbox Code Playgroud)

强烈的道歉并感谢Jon和Joel从他们的例子中"借用".

  • 如果你使用一些常量`DELIMITER ="\n"`,`... append(DELIMITER)`,然后使用`...,builder.length() - DELIMITER.length(),它会更自我记录. `.这可以避免有人更改分隔符但是忘记更新-1的错误. (5认同)
  • 这给出了一个带有空列表的java.lang.StringIndexOutOfBoundsException. (3认同)

And*_*dré 9

通常我会使用apache-commons-lang StringUtils #joout .虽然编写所有这些实用程序功能并不是很难,但重用现有的经过验证的库总是更好.Apache-commons充满了有用的东西!


jan*_*jan 5

如果您使用迭代器而不是 for...each 您的代码可能如下所示:

StringBuilder builder = new StringBuilder();

Iterator<Map.Entry<MyClass.Key, String>> it = data.entrySet().iterator();

while (it.hasNext()) {
    Map.Entry<MyClass.Key, String> entry = it.next();

    builder.append(entry.key())
    .append(": ")
    .append(entry.value());

    if (it.hasNext()) {
        builder.append("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)