Изящно удалите разделитель "\ n" после последней строки в StringBuilder - PullRequest
17 голосов
/ 16 октября 2010

Имеет следующий Java-код, который создает StringBuilder с "\ n", т.е. разделители возврата каретки:

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

Случилось так, что после последней строки (строки) был символ "\ n".

Как изящно удалить последний "\ n" из результирующего StringBuilder объекта?

спасибо.

Ответы [ 7 ]

21 голосов
/ 16 октября 2010

Это всегда работало для меня

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

Операция довольно легкая, внутреннее значение, содержащее текущий размер контента, будет только уменьшено на 1.

Кроме того, проверьте значение длины, прежде чем делать это, если вы думаете, что буфер может быть пустым.

9 голосов
/ 16 октября 2010

Если вы работаете с небольшим количеством строк, вы можете поместить все строки в List<String>, а затем использовать StringUtils.join(myList, "\n");

Другой вариант - trim() результирующая строка.

Обновление после обнаружения аккуратного гуавы Joiner класс:

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

4 голосов
/ 16 октября 2010

Вы можете построить результат без новой строки, чтобы избавиться от:

String separator = "";
while (scanner.hasNextLine()){
    sb.append(separator).append(scanner.nextLine());
    separator = "\n";
}
3 голосов
/ 16 октября 2010

Вместо того, чтобы удалить его, вы просто никогда не сможете добавить его.

while (scanner.hasNextLine()) {
    if (sb.length()>0) sb.append("\n");
    sb.append(scanner.nextLine());
}
2 голосов
/ 16 октября 2010

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

2 голосов
/ 16 октября 2010
bool isFirst = true;
while (scanner.hasNextLine()){
  if(!isFirst)
    sb.append("\n"));
  else
    isFirst = false;

  sb.append(scanner.nextLine());

}
1 голос
/ 16 октября 2010
if (scanner.hasNextLine()) 
  sb.append(scanner.nextLine());
while (scanner.hasNextLine()){
  sb.append("\n").append(scanner.nextLine());
}
...