Split Java String par nouvelle ligne

j'essaie de séparer le texte dans un JTextArea en utilisant un regex pour séparer la chaîne par n cependant, cela ne fonctionne pas et j'ai également essayé par rn|r|n et beaucoup d'autres combinaisons de regexes. 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");
}
329
demandé sur Can Berk Güder 2009-01-18 13:13:56

17 réponses

cela devrait vous couvrir:

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

il n'y a que deux nouvelles lignes (UNIX et Windows) dont vous devez vous soucier.

625
répondu cletus 2016-10-07 14:44:08

si vous ne voulez pas de lignes vides:

String.split("[\r\n]+")
110
répondu Gumbo 2009-01-18 10:21:56

split méthode utilisant regex (expressions régulières). Depuis Java 8 regex prend en charge \R qui représente (de la documentation de la classe de modèle ):

saut de ligne matcher

\R toute séquence de linebreak Unicode, est équivalente à \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

donc nous pouvons l'utiliser pour correspondre:

comme vous le voyez \r\n est placé au début de regex qui assure que regex va essayer de faire correspondre d'abord cette" paire 1519660920 , et seulement si elle échoue, il essaiera caractère unique ligne de séparation.


donc si vous voulez diviser sur le séparateur de ligne utiliser split("\R") .

si vous ne voulez pas supprimer du tableau résultant les chaînes vides "" utilisez split(regex, limit) avec négatif limit paramètre comme split("\R", -1) .

si vous voulez traiter une ou plusieurs lignes vides en tant que délimiteur unique, utilisez split("\R+") .

77
répondu Pshemo 2017-05-23 11:47:22
String.split(System.getProperty("line.separator"));

cela devrait être indépendant du système

41
répondu Shervin Asgari 2012-07-04 11:10:54

vous n'avez pas à double caractères escape dans les groupes de caractères.

pour toutes les lignes non vides utiliser:

String.split("[\r\n]+")
11
répondu Martin 2012-02-17 12:12:44

peut-être que ça marcherait:

supprimer les doubles barres obliques du paramètre de la méthode split:

split = docStr.split("\n");
7
répondu Michael 2009-01-18 19:27:11

pour préserver les lignes vides de se faire écraser utiliser:

String lines[] = String.split("\r?\n", -1);
4
répondu sevenforce 2016-06-27 20:06:08

toutes les réponses données ici ne respectent pas la définition Javas des nouvelles lignes comme indiqué dans Par exemple BufferedReader#readline. Java accepte \n , \r et \r\n comme nouvelle ligne. Certaines réponses correspondent à plusieurs lignes vides ou à des fichiers mal formés. E..G. <sometext>\n\r\n<someothertext> en utilisant [\r\n]+ donnerait deux lignes.

String lines[] = string.split("(\r\n|\r|\n)", -1);

En revanche, la réponse ci-dessus a les propriétés suivantes:

  • il conforme à la définition Javas d'une nouvelle ligne telle que par exemple le BufferedReader l'utilise
  • il ne correspond pas à des nouvelles lignes multiples
  • il ne supprime pas les lignes vides traînantes
4
répondu Till Schäfer 2017-05-19 14:18:29

le code ci - dessus ne fait pas réellement quelque chose de visible-il calcualtes vient alors dumps le calcul. C'est le code que vous avez utilisé, ou juste un exemple pour cette question?

essayez le textAreaDoc.insertString (int, String, AttributeSet) à la fin?

3
répondu Chii 2009-01-18 10:23:01
"151940920 Une" nouvelle méthode lines a été introduit à la String classe , qui renvoie Stream<String>

renvoie un flux de substrats extraits de cette chaîne en ligne terminateurs.

les terminateurs de ligne reconnus sont des lignes d'alimentation "\n " (U+000A), chariot retour "\R " (U+000D) et retour de chariot suivi immédiatement d'un retour ligne d'alimentation "\r\n " (U+000D U+000A).

Voici quelques exemples:

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 ()

3
répondu Anton Balaniuc 2018-06-28 09:39:43

si, pour une raison quelconque, vous ne voulez pas utiliser String.split (par exemple, à cause de expressions régulières ) et vous voulez utiliser la programmation fonctionnelle sur Java 8 ou plus récent:

List<String> lines = new BufferedReader(new StringReader(string))
        .lines()
        .collect(Collectors.toList());
2
répondu Danilo Piazzalunga 2018-03-07 19:51:32

String lines[] =String.split( System.lineSeparator())

1
répondu husayt 2016-06-06 16:30:59

après des tentatives infructueuses sur la base de toutes les solutions données. Je remplace \n par un mot spécial et je divise. Pour moi le suivant a fait le tour:

article = "Alice phoned\n bob.";
article = article.replace("\n", " NEWLINE ");
String sen [] = article.split(" NEWLINE ");

Je n'ai pas pu répliquer l'exemple donné dans la question. Mais, je suppose que cette logique peut être appliquée.

1
répondu kravi 2017-04-11 16:23:35

comme alternative aux réponses précédentes, l'API Splitter de guava peut être utilisée si d'autres opérations doivent être appliquées aux lignes résultantes, comme couper les lignes ou filtrer les lignes vides:

import com.google.common.base.Splitter;

Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);

Notez que le résultat est un Iterable et pas un tableau.

1
répondu Thomas Naskali 2017-06-08 09:19:51
  • essayez cet espoir qu'il vous a été utile

 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");
0
répondu Vishal Yadav 2017-09-14 12:21:55

il existe trois conventions différentes (on pourrait dire qu'il s'agit des normes de facto ) pour définir et afficher un saut de ligne:

  • carriage return + line feed
  • line feed
  • carriage return

Dans certains éditeurs de texte, il est possible d'échanger l'un pour l'autre:

Notepad++

la chose la plus simple est de normaliser en line feed et puis de diviser.

final String[] lines = contents.replace("\r\n", "\n")
                               .replace("\r", "\n")
                               .split("\n", -1);
0
répondu Paul Vargas 2018-07-31 04:15:32
package in.javadomain;

public class JavaSplit {

    public static void main(String[] args) {
        String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot";
        System.out.println("Before split:\n");
        System.out.println(input);

        String[] inputSplitNewLine = input.split("\n");
        System.out.println("\n After split:\n");
        for(int i=0; i<inputSplitNewLine.length; i++){
            System.out.println(inputSplitNewLine[i]);
        }
    }

}
-2
répondu Naveen 2017-07-22 20:39:23