Wie entferne ich Zeilenumbrüche am Anfang und Ende eines Strings (Java)?


Antworten:


277

Verwenden Sie die String.trim()Methode, um Leerzeichen (Leerzeichen, neue Zeilen usw.) vom Anfang und Ende der Zeichenfolge zu entfernen.

String trimmedString = myString.trim();

16
Die Frage betrifft Zeilenumbrüche. Dies entfernt mehr als nur Zeilenumbrüche
mmm

22
String.replaceAll("[\n\r]", "");

13
Bro, @JohnB Es werden auch alle neuen Zeilen zwischen den Zeichenfolgen entfernt. Die Aufforderung besteht darin, nur das führende und nachfolgende neue Zeilenzeichen zu entfernen.
Siddhartha

5

tl; dr

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

String::strip…

Die alte String::trimMethode hat eine seltsame Definition von Leerzeichen .

Wie hier erläutert , fügt Java 11 strip…der StringKlasse neue Methoden hinzu . Diese verwenden eine Unicode-versiertere Definition von Leerzeichen. Siehe die Regeln dieser Definition in der Klasse JavaDoc für Character::isWhitespace.

Beispielcode.

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

Oder Sie können nur das führende oder nur das nachfolgende Leerzeichen entfernen.

Sie erwähnen nicht genau, welche Codepunkte. Ihre Zeilenumbrüche bestehen. Ich kann mir vorstellen, dass Ihre neue Zeile wahrscheinlich in dieser Liste von Codepunkten enthalten ist, auf die Folgendes abzielt strip:

  • Es ist ein Unicode-Leerzeichen (SPACE_SEPARATOR, LINE_SEPARATOR oder PARAGRAPH_SEPARATOR), aber auch kein nicht unterbrechendes Leerzeichen ('\ u00A0', '\ u2007', '\ u202F').
  • Es ist '\ t', U + 0009 HORIZONTALE TABULATION.
  • Es ist '\ n', U + 000A LINE FEED.
  • Es ist '\ u000B', U + 000B VERTIKALE TABULATION.
  • Es ist '\ f', U + 000C FORM FEED.
  • Es ist '\ r', U + 000D CARRIAGE RETURN.
  • Es ist '\ u001C', U + 001C FILE SEPARATOR.
  • Es ist '\ u001D', U + 001D GROUP SEPARATOR.
  • Es ist '\ u001E', U + 001E RECORD SEPARATOR.
  • Es ist '\ u001F', U + 0

3

Dieser Java-Code macht genau das, was im Titel der Frage gestellt wird, nämlich "Zeilenumbrüche vom Anfang und Ende eines String-Java entfernen":

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

Entfernen Sie Zeilenumbrüche nur am Ende der Zeile:

String.replaceAll("[\n\r]$", "")

Entfernen Sie Zeilenumbrüche nur am Zeilenanfang:

String.replaceAll("^[\n\r]", "")

Könnten Sie Ihrer Antwort zusätzlichen Kontext geben? Auf diese Weise kann jeder verstehen, was Ihr Code tut und warum.
Mariano Zorrilla

Ich habe meiner Antwort Erklärungen hinzugefügt. Ich hoffe, dass es jetzt klar ist.
Alexander Samoylov


1
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. Beginn eines Strings = ^,
  2. Ende eines Strings = $,
  3. Regex-Kombination = | ,
  4. Zeilenumbruch = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

Ich werde auch eine Antwort hinzufügen, da die angegebene Antwort nicht ausreichte, obwohl ich dieselbe Frage hatte. Nach einiger Überlegung wurde mir klar, dass dies mit einem regulären Ausdruck sehr einfach möglich ist.

So entfernen Sie Zeilenumbrüche von Anfang an:

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

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

und Ende einer Zeichenfolge:

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

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

Ich bin sicher, dass dies nicht die leistungsfähigste Methode zum Trimmen einer Zeichenfolge ist. Es scheint jedoch der sauberste und einfachste Weg zu sein, einen solchen Vorgang zu integrieren.

Beachten Sie, dass dieselbe Methode zum Trimmen von Variationen und Kombinationen von Zeichen an beiden Enden angewendet werden kann, da es sich um einen einfachen regulären Ausdruck handelt.


Ja, aber was ist, wenn Sie nicht wissen, wie viele Zeilen am Anfang / Ende stehen? Ihre Lösung geht davon aus, dass es in beiden Fällen genau 2 Zeilenumbrüche gibt
Luka Govedič

Der zweite Parameter von split()ist nur die Grenze. Lassen Sie es aus, wenn Sie eine unbegrenzte Anzahl von Malen übereinstimmen möchten.
Zhro

-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

2
Dies beantwortet die Frage nicht richtig. Es werden alle CR und LFs entfernt, nicht nur die am Anfang und am Ende.
James.garriss

Dies wird alle ersetzen, nicht nur von Anfang bis Ende.
Hamzeh Soboh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.