2010-12-27 21 views
7

Mam plik tekstowy .txt, zawierający niektóre wiersze. Załaduję zawartość za pomocą obiektu RequestBuilder i podzielam tekst odpowiedzi za pomocą słów = String.split (" \ n "); Ale zastanawiam się, dlaczego wynik jest przedstawiona "\ n" część .. Na przykład, mój tekst:Dziwne zachowanie String.split (" n")

abc 
def 
ghi 

wynik jest,

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

Każda pomoc jest bardzo ceniona. Z góry dziękuję.

+2

Czy jesteś pewien, że twoje linie są zakończone przez '\ n'? Mogą one zostać zakończone przez '\ r \ n' lub coś jeszcze. – Asaph

+0

o, to może być możliwe, czy możesz mi powiedzieć, jak mogę to sprawdzić? więc co powstaje, gdy wciskam enter w moim edytorze tekstu? – amateurs

+0

Zawsze możesz .trim() wynik i myślę, że to usunie wszystko, co tam. –

Odpowiedz

8

Okna powrotu karetki ("\r\n") nie powinna uczynić widoczną różnicę w wynikach, nie powinien musisz uciec od wyrażenia regularnego, które przekazałeś do String.split().

Oto dowód zarówno powyżej, stosując str.split("\n"): http://ideone.com/4PnZi

Jeśli zrobić mają okna powroty karetki chociaż, należy (choć absolutnie nie jest to konieczne) stosowanie str.split("\r\n"): http://ideone.com/XcF3C

+0

Świetnie! Twoja odpowiedź sprawia, że ​​wszystko jest jasne, ale w edytorze tekstu, jak mogę napisać tekst zakończony \ n? więc \ r \ n jest tylko w oknach? – amateurs

+0

@amateurs Wiele aplikacji systemu Windows używa '\ r \ n' do zakończenia linii, podczas gdy Linux i inne aplikacje używają' \ n'. Jeśli chcesz usunąć znaki powrotu karetki ('\ r') w Javie, użyj' str.replaceAll ("\ r \ n", "\ n") '. Znalezienie aplikacji Windows, która nie korzysta z powrotów karetki, polega na tym, że będziesz musiał zapytać kogoś innego. – marcog

+0

w porządku! mam to. dzięki marcog! : D – amateurs

15

Spróbuj użyć string.split("\\n+"). Albo jeszcze lepiej - split("[\\r\\n]+")

+0

+1 tak, to jest właściwa droga. – Nishant

+6

, ale czy to nie pomija także pustych linii? (może chciał) –

+0

To nie jest konieczne, zobacz moją odpowiedź. – marcog

2

Jeśli rozłam używa regex należy użyć „\\ n” zamiast „\ n”

+2

Split używa RegEx. – Powerlord

+0

fajne. Dzięki. Nie chciałem polegać na pamięci bez podwójnego sprawdzania z dokumentu. Tak więc pozostawiono to OP. :) – Nishant

+0

Mimo, że 'String.split()' robi wyrażenie regularne, nie jest to konieczne. – marcog

0

Możesz także chcą rozważ String[] lines = text.split("\\\\n");