在StringBuilder中的最后一个String之后正常删除“\ n”分隔符

时间:2010-10-16 16:15:33

标签: java string newline stringbuilder

有以下Java代码,用“\ n”创建StringBuilder,即。回车分隔符:

while (scanner.hasNextLine()){
    sb.append(scanner.nextLine()).append("\n");
}

发生了,在最后一个String(行)后面有“\ n”符号。

如何从生成的StringBuilder对象中优雅地删除最后一个“\ n”?

感谢。

7 个答案:

答案 0 :(得分:21)

这一直对我有用

sb.setLength(sb.length() - 1);

操作非常轻量级,内部值保持当前内容大小将减少1。

另外,如果您认为缓冲区可能为空,请在执行此操作之前检查长度值。

答案 1 :(得分:9)

如果您使用足够少的行,则可以将所有行放在List<String>中,然后使用StringUtils.join(myList, "\n");

另一个选项是trim()生成的字符串。

发现番石榴整齐的Joiner课程后更新:

Joiner.on('\n').join(myList)

答案 2 :(得分:4)

你可以在没有新行的情况下构建结果来摆脱:

String separator = "";
while (scanner.hasNextLine()){
    sb.append(separator).append(scanner.nextLine());
    separator = "\n";
}

答案 3 :(得分:3)

而不是必须删除它,你可以简单地永远不添加它。

while (scanner.hasNextLine()) {
    if (sb.length()>0) sb.append("\n");
    sb.append(scanner.nextLine());
}

答案 4 :(得分:2)

bool isFirst = true;
while (scanner.hasNextLine()){
  if(!isFirst)
    sb.append("\n"));
  else
    isFirst = false;

  sb.append(scanner.nextLine());

}

答案 5 :(得分:2)

sb.deleteCharAt(sb.length() - 1);

答案 6 :(得分:1)

if (scanner.hasNextLine()) 
  sb.append(scanner.nextLine());
while (scanner.hasNextLine()){
  sb.append("\n").append(scanner.nextLine());
}