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

128

Ich habe eine Zeichenfolge, die Text enthält, gefolgt von einer Leerzeile. Was ist der beste Weg, um das Teil mit Text zu erhalten, aber die Leerzeichen-Zeilenumbruch am Ende zu entfernen?

Confiqure
quelle
1
Nein, ist es nicht. Die Frage im Link lautet eher "Ersetzen".
Faiz

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();
Crozin
quelle
16
Die Frage betrifft Zeilenumbrüche. Dies entfernt mehr als nur Zeilenumbrüche
mmm
22
String.replaceAll("[\n\r]", "");
John B.
quelle
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
Basil Bourque
quelle
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]", "")
Alexander Samoylov
quelle
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]
hmmh
quelle
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.

Zhro
quelle
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", "");
Khan
quelle
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