当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何为除最后一行之外的所有行追加换行符?》经验,为你挑选了4个好方法。

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

谢谢!



1> Jon Skeet..:

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

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

for (Map.Entry entry : data.entrySet()) {
    if (first) {
        first = false;
    } else {
        builder.append("\n"); // Or whatever break you want
    }
    builder.append(entry.key())
           .append(": ")
           .append(entry.value());
}


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

2> Joel Coehoor..:

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

StringBuilder result = new StringBuilder();

string newline = "";  
for (Map.Entry entry : data.entrySet())
{
    result.append(newline)
       .append(entry.key())
       .append(": ")
       .append(entry.value());

    newline = "\n";
}


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

3> Jay R...:

那这个呢?

StringBuilder result = new StringBuilder();

for(Map.Entry entry : data.entrySet())
{
    builder.append(entry.key())
       .append(": ")
       .append(entry.value())
       .append("\n");
}

return builder.substring(0, builder.length()-1);

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


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

4> André..:

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

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有