Strange String.split(„n”) comportament (Programare, Java, Split)

amatori a intrebat.

Am un fișier text .txt, care conține câteva rânduri…Încarc fișierul folosind obiectul RequestBuilder, și împart textul de răspuns cuwords = String.split(„
„); dar mă întreb, de ce rezultatul conține partea „
„…De exemplu, textul meu:

abc
def
ghi

rezultatul este,

words[0] = "abc
"
words[1] = "def
"
words[2] = "ghi
"

Orice ajutor este foarte apreciat. Mulțumesc anticipat.

Comentarii

  • Sunteți sigur că liniile dvs. sunt terminate cu
    ? Ar putea fi terminate cu r
    , , sau chiar altceva. –  > Por Asaph.
  • ohh poate fi posibil, poți să-mi spui cum pot verifica ? deci ce se creează când apăs enter în editorul meu de text ? –  > Por amatori.
  • Poți oricând să .trim() rezultatul și cred că va elimina tot ce este acolo. – user500074
  • ok o să încerc asta… mulțumesc 😀 -.  > Por amatori.
5 răspunsuri
moinudin

Întoarcerea la cărămidă în Windows ("r
"
) nu ar trebui să facă o diferență vizibilă în rezultatele tale, și nici nu ar trebui să fie nevoie să scapi expresia regulată pe care o treci către String.split().

Iată o dovadă a ambelor aspecte de mai sus folosind str.split("
")
: http://ideone.com/4PnZi

În cazul în care faceți aveți reveniri la cărămidă în Windows, ar trebui (deși nu este strict necesar) să folosiți str.split("r
")
: http://ideone.com/XcF3C

Comentarii

  • Grozav! răspunsul tău face totul clar, dar în editorul de text, cum pot face un text care se termină cu
    ? deci r
    este doar în windows ? –  > Por amatori.
  • @amateurs Multe aplicații Windows vor folosi r
    pentru a termina o linie, în timp ce Linux și alte aplicații folosesc
    . Dacă doriți să eliminați revenirile de cărămidă (r) în Java, utilizați str.replaceAll("r
    ", "
    ")
    . Pentru a găsi o aplicație Windows care să nu folosească returnări de cărămidă în primul rând, va trebui să întrebați pe altcineva. –  > Por moinudin.
  • această expresie de divizare nu a funcționat pentru a diviza intrarea pe mai multe linii într-un browser chrome. –  > Por user3360944.
Bozho

Încercați să utilizați string.split("
+")
. Sau chiar mai bine – split("[\r
]+")

Comentarii

  • dar nu cumva ar sări și liniile goale? (poate dorit) –  > Por utilizator85421.
  • Acest lucru nu este necesar, vezi răspunsul meu. –  > Por moinudin.
  • dubla backslash este inutilă. Regex desemnează deja backslash pentru construcțiile scăpate ca „
    „. A se vedea „Backslash-uri, scăpări și cotizare”, docs.oracle.com/javase/1.4.2/docs/api/java/java/util/regex/… –  > Por angryITguy.
tricknology

De asemenea, este posibil să doriți să luați în considerare String[] lines = text.split("\
");

Comentarii

  • Pentru că Java are nevoie ca regex să fie un literal String. Aveți
    , dar
    este, de asemenea, special în regex. Pentru a complica lucrurile, modul în care scăpați în regex este, de asemenea, cu . Așa că trebuie să scăpați din nou pentru a face
    , ceea ce pare a fi suficient pentru regex, dar Java consideră modelele regex ca fiind Șiruri. El consideră că ai scăpat
    pentru a face doar n. Cu
    , Java vede un
    și regex crede că vrei să spui
    , dar este încă văzut ca un caracter special în regex. Deci regex \\ = și Java \ = , ceea ce ne lasă cu
    pe care java îl vede în cele din urmă ca
    . Am ajuns să evadez chestii chiar acum, heh. –  > Por tricknology.
Nishant

Dacă split folosește regex, ar trebui să folosești „
” în loc de „
„.

Comentarii

  • cool. Mulțumesc. Nu am vrut să mă bazez pe memorie fără să verific de două ori din document. Așa că, am lăsat asta la OP să se uite la. 🙂 –  > Por Nishant.
  • Deși String.split() acceptă un regex, acest lucru nu este necesar. –  > Por moinudin.
Dilip Paudel

Încercați să utilizați string.split("\
")
. Funcționează pentru mine.

Tags:,