Как удалить символы новой строки из начала и конца строки (Java)? - PullRequest
113 голосов
/ 17 сентября 2011

У меня есть строка, содержащая текст, за которым следует пустая строка. Какой лучший способ сохранить часть с текстом, но убрать пробел с новой строки?

Ответы [ 7 ]

252 голосов
/ 17 сентября 2011

Используйте метод String.trim(), чтобы избавиться от пробелов (пробелы, новые строки и т. Д.) От начала и конца строки.

String trimmedString = myString.trim();
25 голосов
/ 17 сентября 2011
String.replaceAll("[\n\r]", "");
1 голос
/ 18 июля 2018
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. Начало строки = ^,
  2. Конец строки = $,
  3. регулярное выражение = |,
  4. Разрыв строки = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]
1 голос
/ 26 октября 2017

Если ваша строка потенциально null, рассмотрите возможность использования StringUtils.trim() - нулевой версии String.trim().

0 голосов
/ 21 мая 2019

ТЛ; др

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

Старый метод String::trim имеет странное определение из пробел .

Как обсуждено здесь , Java 11 добавляет новые strip… методы в класс String. Они используют более удобное для Unicode определение пробелов. См. Правила этого определения в классе JavaDoc для Character::isWhitespace.

Пример кода.

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

Или вы можете убрать только начальные или только конечные пробелы .

Вы не упомянули, что именно код (ы) составляют ваши новые строки. Я полагаю, что ваш перевод строки, вероятно, включен в этот список кодов, на которые нацелено strip:

  • Это символ пробела Unicode (SPACE_SEPARATOR, LINE_SEPARATOR или PARAGRAPH_SEPARATOR), но он также не является неразрывным пробелом ('\ u00A0', '\ u2007', '\ u202F').
  • Это '\ t', U + 0009 ГОРИЗОНТАЛЬНАЯ ТАБЛИЦА.
  • Это '\ n', U + 000A LINE FEED.
  • Это '\ u000B', ВЕРТИКАЛЬНАЯ ТАБЛИЦА U + 000B.
  • Это '\ f', U + 000C ФОРМА.
  • Это '\ r', U + 000D ВОЗВРАТ ЗАРЯДКИ.
  • Это '\ u001C', РАЗДЕЛИТЕЛЬ ФАЙЛА U + 001C.
  • Это '\ u001D', СЕПАРАТОР ГРУППЫ U + 001D.
  • Это '\ u001E', СЕПАРАТОР ЗАПИСИ U + 001E.
  • Это '\ u001F', U + 0
0 голосов
/ 06 марта 2017

Я собираюсь добавить ответ и на этот вопрос, потому что, хотя у меня был тот же вопрос, предоставленного ответа было недостаточно. Подумав немного, я понял, что это можно сделать очень легко с помощью регулярного выражения.

Чтобы удалить переводы строки с начала:

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

и конец строки:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

Я уверен, что это не самый эффективный способ обрезки строки. Но, похоже, это самый чистый и простой способ встроить такую ​​операцию.

Обратите внимание, что тот же метод может быть использован для обрезки любого варианта и комбинации символов с любого конца, поскольку это простое регулярное выражение.

0 голосов
/ 20 июля 2014
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
...