Wie entferne ich Zeilenumbrüche vom Anfang und Ende einer Zeichenfolge?

Lesezeit: 4 Minuten

Benutzer-Avatar
Dylan Wheeler

Ich habe eine Zeichenfolge, die Text enthält, gefolgt von einer Leerzeile. Was ist der beste Weg, um den Teil mit Text beizubehalten, aber den Leerzeichen-Umbruch vom Ende zu entfernen?

  • Mögliches Duplikat von Entfernen von Leerzeichen aus Zeichenfolgen in Java

    – Alex K

    12. August 2016 um 11:10 Uhr

  • Nein, ist es nicht. Die Frage im Link fragt eher nach “Ersetzen”.

    – Faiz

    20. Oktober 2016 um 9:41 Uhr

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

String trimmedString = myString.trim();

  • Die Frage bezieht sich auf Zeilenumbrüche. Dies entfernt mehr als nur Zeilenumbrüche

    – mjs

    7. November 2015 um 13:39 Uhr

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

  • Bro, @JohnB Es wird auch alle neuen Zeilenzeichen zwischen der Zeichenfolge entfernen. Die Aufforderung besteht darin, nur das führende und abschließende Zeilenumbruchzeichen zu entfernen.

    – Siddhartha

    7. September 2017 um 11:26 Uhr


Benutzer-Avatar
Alexander Samoylow

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

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

Zeilenumbrüche nur am Zeilenende entfernen:

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

Zeilenumbrüche nur am Anfang der Zeile entfernen:

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 Zorilla

    24. Februar 2020 um 19:18 Uhr

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

    – Alexander Samoylov

    25. Februar 2020 um 11:31 Uhr

  • Dies ist die richtige Lösung, da nur Zeilenumbrüche und keine Leerzeichen, Tabulatoren oder andere Leerzeichen entfernt werden.

    – Nicht sagen

    21. Oktober 2020 um 17:20 Uhr

tl;dr

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

String::strip…

Das alte String::trim Methode hat a seltsame Definition von Leerzeichen.

Wie besprochen hierJava 11 fügt neue hinzu strip… Methoden zu den String Klasse. Diese verwenden eine Unicode-fähigere 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 sich ausziehen nur die führende oder nur das nachlaufende Leerzeichen.

Du erwähnst nicht genau was Codepunkt(e) Bilden Sie Ihre Zeilenumbrüche. Ich kann mir vorstellen, dass Ihr Zeilenumbruch wahrscheinlich in dieser Liste von Codepunkten enthalten ist, auf die abgezielt wird strip:

  • Es ist ein Unicode-Leerzeichen (SPACE_SEPARATOR, LINE_SEPARATOR oder PARAGRAPH_SEPARATOR), aber nicht auch ein geschütztes Leerzeichen (‘\u00A0’, ‘\u2007’, ‘\u202F’).
  • Es ist ‘\t’, U+0009 HORIZONTALE TABULIERUNG.
  • Es ist ‘\n’, U+000A LINE FEED.
  • Es ist ‘\u000B’, U+000B VERTIKALE TABULIERUNG.
  • 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

Benutzer-Avatar
entpnerd

Wenn Ihre Zeichenfolge potenziell ist nullerwägen Sie die Verwendung StringUtils.trim() – die nullsichere Version von String.trim().

Wenn Sie nur entfernen möchten Zeilenumbrüche (nicht Leerzeichen, Tabulatoren) an Anfang und Ende eines Strings (nicht dazwischen), dann können Sie diesen Ansatz verwenden:

Verwenden Sie einen regulären Ausdruck, um Wagenrückläufe zu entfernen (\\r) und Zeilenvorschübe (\\n) von Anfang an (^) und enden ($) einer Zeichenfolge:

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

Vollständiges Beispiel:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello world\nHello everyone\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

Es gibt aus:

before: >
Hello world
Hello everyone
<
after: >Hello world
Hello everyone<

Benutzer-Avatar
Zhro

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

Zu entfernen 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 mir sicher, dass dies nicht die leistungseffizienteste Art ist, eine Saite zu trimmen. Aber es scheint die sauberste und einfachste Möglichkeit zu sein, eine solche Operation zu inlinen.

Beachten Sie, dass die gleiche Methode angewendet werden kann, um jede Variation und Kombination von Zeichen an beiden Enden zu kürzen, da es sich um eine einfache Regex handelt.

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

    – Luka Govedič

    17. Juli 2018 um 6:39 Uhr

  • Der zweite Parameter von split() ist nur die Grenze. Lassen Sie es aus, wenn Sie unbegrenzt oft übereinstimmen möchten.

    – Zhro

    17. Juli 2018 um 11:27 Uhr

1345390cookie-checkWie entferne ich Zeilenumbrüche vom Anfang und Ende einer Zeichenfolge?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy