2013-11-07 4 views
0

Скажем, у меня есть следующая строка str:Split строки, содержащие символы новой строки Java

GTM =0.2 
Test =100 
[DLM] 
ABCDEF =5 

(да, она содержит символы перевода строки) То, что я пытаюсь разделить с [DLM] разделителем подстроки, как это:

String[] strArr = str.split("[DLM]"); 

Почему, когда я делаю:

System.out.print(strArr[0]); 

я т его выход: GT

и когда я

System.out.print(strArr[1]); 

я =0.2

Есть ли в этом смысл вообще?

+0

Просьба ** все ** соответствующий код, будет легче помочь. –

+0

Вы действительно получаете '= 0.2 Test = 100 [' для 'strArr [1]'? – ipavlic

+0

nope, just = 0.2 (print vs println) – astralmaster

ответ

5

str.split("[DLM]"); должен быть str.split("\\[DLM\\]");

Почему?

[ и ] являются special characters и String#split принимает регулярное выражение.

Решение, которое мне нравится больше использует Pattern#quote:

str.split(Pattern.quote("[DLM]"));

quote возвращает Строка представление данного регулярного выражения а.

+1

Да, он разбивает строку на M в GTM, но почему она ломается на новой строке? – ipavlic

+0

@ipavlic Что значит? – Maroun

+0

Да, все. Не знаю .split() требуется регулярное выражение. Спасибо. – astralmaster

1

Да, вы задаете регулярное выражение, которое гласит: «Разделить либо на D, либо на L, или на M».

Вам следует избегать таких мальчиков, как это: str.split ("\ [DLM \]");

Это раскалывается на первом М.

1

Побег скобки

("\\[DLM\\]") 

При использовании скобок внутри «», он читает его как каждый символ внутри скобок является разделителем. Так что в вашем случае, M был разделителем

1

использование

String[] strArr = str.split("\\[DLM]\\"); 

Вместо

String[] strArr = str.split("[DLM]"); 

Другой мудрый он будет разделен либо D, или L, или M.

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