2010-12-27 6 views
7

У меня есть текстовый файл .txt, содержащий некоторые строки. Загружаю содержимое с помощью объекта RequestBuilder и разделяю responseText на слов = String.split (" \ п "); но я задаюсь вопросом, почему результат содержит «\ п» часть .. Например, мой текст:Поведение Strange String.split (" n")

abc 
def 
ghi 

результат,

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

Любая помощь высоко ценится. Заранее спасибо.

+2

Вы уверены, что ваши строки завершены с '\ n'? Они могут быть завершены с помощью '\ r \ n' или еще что-то еще. – Asaph

+0

ohh это возможно, можете ли вы сказать мне, как я могу проверить его? так что создано, когда я нажимаю кнопку ввода в своем текстовом редакторе? – amateurs

+0

Вы всегда можете получить результат .trim(), и я думаю, что он удалит все, что там есть. –

ответ

8

возврата каретки для Windows ("\r\n") не должны сделать видимой разницы в результатах, и не должны вам нужно избежать обычного выражения, которое вы передаете String.split().

Вот доказательство как выше, с использованием str.split("\n"): http://ideone.com/4PnZi

Если вы сделать есть Windows, каретка возвращается, хотя, вы должны (хотя, строго не обязательно) использовать str.split("\r\n"): http://ideone.com/XcF3C

+0

Отлично! ваш ответ все ясно, но в текстовом редакторе, как я могу сделать текст, который завершен с \ n? так что \ r \ n только в окнах? – amateurs

+0

@ amateurs Многие приложения Windows будут использовать '\ r \ n' для завершения строки, в то время как Linux и другие приложения используют' \ n'. Если вы хотите удалить каретки ('\ r') в Java, используйте' str.replaceAll ("\ r \ n", "\ n") '. Если вы обнаружите приложение Windows, которое не использует возврат каретки, вам нужно будет спросить кого-то другого. – marcog

+0

хорошо! я понял. спасибо marcog! : D – amateurs

15

Попробуйте использовать string.split("\\n+"). Или еще лучше - split("[\\r\\n]+")

+0

+1 да, это правильный путь. – Nishant

+6

, но не могли бы также пропустить пустые строки? (возможно, пожелал) –

+0

Это не обязательно, см. мой ответ. – marcog

2

Если раскол использует регулярное выражение, вы должны использовать «\\ п» вместо «\ п»

+2

В Split используется RegEx. – Powerlord

+0

прохладный. Благодарю. Я не хотел полагаться на память без двойной проверки из документа. Итак, оставим это на OP, чтобы посмотреть. :) – Nishant

+0

Хотя 'String.split()' принимает регулярное выражение, это необязательно. – marcog

0

Вы также можете рассмотрите String[] lines = text.split("\\\\n");

Смежные вопросы