У меня есть строка, содержащая текст, за которым следует пустая строка. Как лучше всего оставить часть с текстом, но удалить пробел новой строки с конца?
У меня есть строка, содержащая текст, за которым следует пустая строка. Как лучше всего оставить часть с текстом, но удалить пробел новой строки с конца?
Ответы:
Используйте String.trim()
метод, чтобы избавиться от пробелов (пробелов, новых строк и т. Д.) В начале и в конце строки.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Старый String::trim
метод имеет странное определение из пробелов .
Как обсуждалось здесь , Java 11 добавляет strip…
в String
класс новые методы . В них используется более понятное определение пробелов в Юникоде. См. Правила этого определения в классе JavaDoc для Character::isWhitespace
.
Пример кода.
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Или вы можете удалить только начальные или конечные пробелы.
Вы не указываете точно, какие кодовые точки составляют ваши новые строки. Я полагаю, что ваша новая строка, вероятно, включена в этот список кодовых точек, на которые нацелены strip
:
Этот код Java делает именно то, что указано в заголовке вопроса, а именно «удаляет символы новой строки из начала и конца строки-java»:
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Удаляйте символы новой строки только с конца строки:
String.replaceAll("[\n\r]$", "")
Удаляйте символы новой строки только с начала строки:
String.replaceAll("^[\n\r]", "")
Если ваша строка потенциально возможна null
, рассмотрите возможность использования StringUtils.trim()
- нулевой версии String.trim()
.
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])$", "") + "]");
Если вы хотите удалить разрывы строк (а не пробелы, табуляции) в начале и конце строки (не между ними), вы можете использовать этот подход:
Используйте регулярные выражения для удаления возврата каретки ( \\r
) и перевода строки ( \\n
) из начала ( ^
) и конца ( $
) строки:
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
Полный пример:
public class RemoveLineBreaks {
public static void main(String[] args) {
var s = "\nHello\nWorld\n";
System.out.println("before: >"+s+"<");
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
System.out.println("after: >"+s+"<");
}
}
Он выводит:
before: >
Hello
World
<
after: >Hello
World<
Я собираюсь добавить ответ и на этот вопрос, потому что, хотя у меня был тот же вопрос, предоставленного ответа было недостаточно. Поразмыслив, я понял, что это очень легко сделать с помощью регулярного выражения.
Чтобы удалить символы новой строки с начала:
// 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] + "-");
Я уверен, что это не самый эффективный способ обрезки строки. Но это, по-видимому, самый чистый и простой способ встроить такую операцию.
Обратите внимание, что тот же метод можно использовать для обрезки любых вариаций и комбинаций символов с любого конца, поскольку это простое регулярное выражение.
split()
- это просто предел. Отключите его, если хотите совпадать неограниченное количество раз.
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");