2009-09-26 1 views
34

Из чего я понимаю, обратная косая точка (\.) означает один символ любого персонажа? Так как обратная косая черта - это побег, она должна быть обратная косая черта ("\\.")Java регулярное выражение value.split ("\."), "Обратная косая черта" делит символ?

Что это делает для строки? Я только что видел это в существующем коде, над которым я работаю. Из того, что я понимаю, он разделит строку на отдельные символы. Зачем это делать вместо String.toCharArray(). Итак, это разделяет строку на массив строк, который содержит только один символ для каждой строки массива?

ответ

68

Я предполагаю, что вам не хватает символов обратного слэша ('\') - символы escape-символов в литералах Java String. Поэтому, когда вы хотите использовать «\» escape в регулярном выражении, написанном как Java String, вам нужно его избежать; например

Pattern.compile("\."); // Java syntax error 

// A regex that matches a (any) character 
Pattern.compile("."); 

// A regex that matches a literal '.' character 
Pattern.compile("\\."); 

// A regex that matches a literal '\' followed by one character 
Pattern.compile("\\\\."); 

String.split(String separatorRegex) Метод разбивает строку на подстроки, разделенных подстрок, соответствующих регулярному выражению. Итак, str.split("\\.") разделит str на подстроки, разделенные одним литералом '.' персонаж.

+0

:: Все работает хорошо! Но не могли бы вы более подробно рассказать об этом, например, о том, почему четыре обратной косой черты? Разве не должно быть три? – Oliver

+2

Либеральная обратная косая черта должна быть удалена один раз в регулярном выражении. Это дает 2. Эти 2 обратных слэша должны быть экранированы в строковом литерале. Это делает 4. Три обратных слэша дадут вам ошибку компиляции Java. Попробуйте и убедитесь сами. –

+0

Почему Pattern.compile ("\."); создать синтаксическую ошибку? – adub3

7

Регулярное выражение "." будет соответствовать любому персонажу, как вы заявляете. Однако сбежавшая точка «\». будет соответствовать буквальным символам. Таким образом, 192.168.1.1 разделился на "\." приведет к появлению {"192", "168", "1", "1"}.

Ваша формулировка не совсем ясна, но я думаю, что это то, о чем вы просите.

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