470 Stimmen

Java-String durch neue Zeile teilen

Ich versuche, den Text in einer JTextArea einen Regex verwenden, um den String nach \n Dies funktioniert jedoch nicht, und ich habe es auch mit \r\n|\r|n und viele andere Kombinationen von Regexen. Code:

public void insertUpdate(DocumentEvent e) {
    String split[], docStr = null;
    Document textAreaDoc = (Document)e.getDocument();

    try {
        docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
    } catch (BadLocationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    split = docStr.split("\\n");
}

864voto

cletus Punkte 596503

Das sollte Sie abdecken:

String lines[] = string.split("\\r?\\n");

Es gibt eigentlich nur zwei Zeilenumbrüche (UNIX und Windows), um die Sie sich kümmern müssen.

180voto

Pshemo Punkte 118094

String#split(String regex) Methode ist die Verwendung von Regex (reguläre Ausdrücke). Seit Java 8 unterstützt regex \R die (von Dokumentation der Klasse Pattern ):

Zeilenumbruchvergleicher
\R          Eine beliebige Unicode-Zeilenumbruchsequenz ist gleichbedeutend mit \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

Wir können sie also zum Abgleich verwenden:

Wie Sie sehen \r\n wird an den Anfang der Regex gesetzt, was sicherstellt, dass die Regex versucht, mit dieser Paar und nur wenn diese Übereinstimmung fehlschlägt, wird versucht, eine Übereinstimmung mit Einzelzeichen Zeilentrenner.


Wenn Sie also am Zeilentrenner aufteilen wollen, verwenden Sie split("\\R") .

Wenn Sie aus dem resultierenden Array keine nachstehenden leeren Zeichenfolgen entfernen möchten "" verwenden. split(regex, limit) mit negativem limit Parameter wie split("\\R", -1) .

Wenn Sie eine oder mehrere fortlaufende Leerzeilen als einzelnes Begrenzungszeichen behandeln wollen, verwenden Sie split("\\R+") .

142voto

Gumbo Punkte 617646

Wenn Sie keine leeren Zeilen haben wollen:

String.split("[\\r\\n]+")

66voto

Shervin Asgari Punkte 22891
String.split(System.lineSeparator());

Dies sollte systemunabhängig sein

30voto

Anton Balaniuc Punkte 9619

Eine neue Methode lines ist eingeführt worden bei String Klasse in java-11 die folgende Ergebnisse liefert Stream<String>

Gibt einen Stream von Teilzeichenketten zurück, die aus dieser partitionierten Zeichenkette extrahiert wurden durch Zeilenabschlüsse.

Erkannte Zeilenabschlüsse sind Zeilenvorschub " \n " (U+000A), Wagen return " \r " (U+000D) und einem Wagenrücklauf, unmittelbar gefolgt von einem Zeilenvorschub " \r\n " (U+000D U+000A).

Hier sind einige Beispiele:

jshell> "lorem \n ipusm \n sit".lines().forEach(System.out::println)
lorem
 ipusm
 sit

jshell> "lorem \n ipusm \r  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

jshell> "lorem \n ipusm \r\n  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

[String#lines()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#lines())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X