Подтвердить что ты не робот

Изящно удалите разделитель "\n" после последней строки в StringBuilder

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

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

Произошло, что после последней строки (строки) был символ "\n" .

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

спасибо.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Обновление после обнаружения guava neat Joiner class:

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

  sb.append(scanner.nextLine());

}

Ответ 6

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

Ответ 7

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