Java >> Java tutorial >  >> Tag >> new

Split Java String af Newline

1. Oversigt

I denne øvelse vil vi se på forskellige måder at opdele en Java-streng efter nye linjetegn. Da newline-tegnet er forskelligt i forskellige operativsystemer, vil vi se på metoden til at dække Unix, Linux, Mac OS 9 og tidligere, macOS og Windows OS.

2. Opdel streng af Newline

2.1. Opdel streng af Newline ved at bruge System#lineSeparator Metode

Da newline-tegnet er forskelligt i forskellige operativsystemer, kan vi bruge systemdefinerede konstanter eller metoder, når vi ønsker, at vores kode skal være platformsuafhængig.

System#lineSeparator metoden returnerer linjeseparatorstrengen for det underliggende operativsystem. Det returnerer værdien af ​​systemegenskaben line.separator .

Derfor kan vi bruge linjeseparatorstrengen returneret af System#lineSeparator metode sammen med String#split metode til at opdele Java strengen af newline:

String[] lines = "Line1\r\nLine2\r\nLine3".split(System.lineSeparator());

De resulterende linjer vil være:

["Line1", "Line2", "Line3"]

2.2. Opdel streng ved Newline ved at bruge regulære udtryk

Lad os derefter starte med at se på de forskellige tegn, der bruges til at adskille linjer i forskellige operativsystemer.

"\n ”-tegn adskiller linjer i Unix, Linux og macOS. På den anden side er "\r\n ”-tegn adskiller linjer i Windows-miljøet. Til sidst, "\r ”-tegn adskiller linjer i Mac OS 9 og tidligere.

Derfor skal vi tage os af alle de mulige nylinjetegn, mens vi opdeler en streng med nye linjer ved hjælp af regulære udtryk.

Lad os endelig se på det regulære udtryksmønster, der vil dække alle de forskellige operativsystemers nye linjetegn. Det vil sige, vi skal lede efter "\n", "\r\n" og "\r" mønstre. Dette kan nemt gøres ved at bruge regulære udtryk i Java.

Det regulære udtryksmønster til at dække alle de forskellige nye linjetegn vil være:

"\\r?\\n|\\r"

Når vi opdeler det, ser vi, at:

  • \\n =Unix-, Linux- og macOS-mønster
  • \\r\\n =Windows-miljømønster
  • \\r =MacOS 9 og tidligere mønster

Lad os derefter bruge strengen #opdelt metode til at opdele Java strengen . Lad os se på et par eksempler:

String[] lines = "Line1\nLine2\nLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\rLine2\rLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\r?\\n|\\r");

De resulterende linjer for alle eksemplerne vil være:

["Line1", "Line2", "Line3"]

2.3. Opdel streng af Newline i Java 8

Java 8 giver en “\R” mønster, der matcher enhver Unicode-linjeskiftsekvens og dækker alle nye linjetegn for forskellige operativsystemer. Derfor kan vi bruge “\R” mønster i stedet for “\\r?\\n|\\r” i Java 8 eller højere.

Lad os se på et par eksempler:

String[] lines = "Line1\nLine2\nLine3".split("\\R");
String[] lines = "Line1\rLine2\rLine3".split("\\R");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\R");

Igen vil de resulterende outputlinjer for alle eksempler være:

["Line1", "Line2", "Line3"]

2.4. Opdel streng af Newline ved hjælp af mønster Klasse

I Java 8, Mønster klasse leveres med en praktisk splitAsStream metode.

I vores tilfælde kan vi bruge “\R” mønster, men denne metode kan selvfølgelig også bruges til at opdele String ved et hvilket som helst, mere sofistikeret, regulært udtryk.

Lad os se det i aktion:

Pattern pattern = Pattern.compile("\\R");
Stream<String> lines = pattern.splitAsStream("Line1\nLine2\nLine3");
Stream<String> lines = pattern.splitAsStream("Line1\rLine2\rLine3");
Stream<String> lines = pattern.splitAsStream("Line1\r\nLine2\r\nLine3");

Som vi kan se, får vi denne gang en Strøm i stedet for en matrix af streng s, som vi nemt kan behandle videre.

2.5. Opdel streng af Newline i Java 11

Java 11 gør opdeling efter newline virkelig let:

Stream<String> lines = "Line1\nLine2\rLine3\r\nLine4".lines();

Fordi lines() bruger en “\R” mønster under hætten, det fungerer med alle slags linjeadskillere.

Som vi kan se, ville det være svært at finde en enklere måde at opdele en streng på af newline!

3. Konklusion

I denne hurtige artikel kiggede vi på de forskellige newline-karakterer, som vi sandsynligvis vil støde på i forskellige operativsystemer. Desuden så vi, hvordan man opdeler en Java-streng efter nye linjer ved hjælp af vores eget regulære udtryksmønster, såvel som ved at bruge “\R” mønster tilgængeligt fra Java 8.

Som altid er alle disse kodeeksempler tilgængelige på GitHub.


Java tag