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());
}
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";
}
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);
强烈的道歉并感谢Jon和Joel从他们的例子中"借用".
通常我会使用apache-commons-lang StringUtils #joout .虽然编写所有这些实用程序功能并不是很难,但重用现有的经过验证的库总是更好.Apache-commons充满了有用的东西!
如果您使用迭代器而不是 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");
    }
}