it-swarm.com.ru

Как удалить символы новой строки из начала и конца строки (Java)?

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

110
Confiqure

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

String trimmedString = myString.trim();
245
Crozin
String.replaceAll("[\n\r]", "");
24
John B
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
hmmh

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

1
entpnerd

тЛ; др

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

String::strip…

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

Как уже говорилось здесь , 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
Basil Bourque

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

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

// 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
Zhro