2016-05-26 2 views
1

У меня возникло множество трудностей с очень простой задачей в java. Во-первых, я хотел бы разделить строку на массив, каждую букву в одиночку и использовать регулярное выражение (это важно, потому что я буду модернизировать его для более сложных регулярных выражений после этого, но я во-первых, нужно это просто один для запуска)Java Split RegEx не работает

Stringbase = "artetbewrewcwewfd";  
    String arr2[] = base.split("\\."); 

Почему я не могу сделать это так?

String base = "artetbewrewcwewfd";  
    String arr2[] = base.split("\\[abcdefghijklmnopqrstuvwxyz]"); 

ни даже подобный этому.

https://ideone.com/cCYVSc

https://ideone.com/DYnh3m

спасибо за ваше время

+0

Итак, вы пытаетесь разбить строку без какой-либо точки на точке ... и что вы там делаете? Я имею в виду, что вы явно избежали своего регулярного выражения, поэтому, я думаю, вы знаете, что делаете? – Tom

+0

Попробуйте ['String arr2 [] =" artetbew42rewcwewfd ".split (" (?! ^) (? =.) ");'] (Https://ideone.com/Yv87rF) –

+0

dot - символ для любого символа насколько я знаю, в регулярном выражении? –

ответ

1

Обратите внимание, что \\. (беглый точка) в первом регулярном выражении соответствует символу точечный характер (и ваша строка не имеет точек, таким образом, split возвращает всю строку).

Второго "\\[abcdefghijklmnopqrstuvwxyz]" шаблон совпадает с последовательности из [abcdefghijklmnopqrstuvwxyz], потому что вы разрушили символов класса конструкции вытекания первого [ (и беглый [ соответствует литералу [, таким образом, закрытие ] также трактуются как буквальный символ, а не специальный конструктивный символ).

Чтобы просто разделить, прежде чем каждый символ в строке, вы можете использовать

String arr2[] = "artetbew42rewcwewfd".split("(?!^)(?=.)"); 
System.out.println(Arrays.toString(arr2)); 
// => [a, r, t, e, t, b, e, w, 4, 2, r, e, w, c, w, e, w, f, d] 

См IDEONE demo

Здесь (?!^) проваливает матч в самом начале строки (чтобы не для возврата пустого пространства в качестве первого элемента), а (?=.) - это положительный результат для соответствия любому персонажу, но символу новой строки.

Если вы хотите совместить перед символом новой строки, используйте флаг Pattern.DOTALL или добавьте (?s) перед рисунком.