2013-07-11 5 views
1

У меня возникла следующая проблема с регулярным выражением: я написал программу, которая читает слова из некоторых текстовых (txt) файлов и записывает их в другой файл, записывая одно слово в строке.Regex удалил специальный символ

Все работает нормально, за исключением случаев, когда в слове есть специальные символы ľščťžýáíé. Регулярное выражение удаляет символ и разбивает слово, в котором был специальный символ.

Для примера:
Вход:

I am Jožo.

Выход:

I 
am 
Jo 
o 

Вот фрагмент кода:

while((line = br.readLine())!= null){ 
    Pattern p = Pattern.compile("[\\w']+"); 
    Matcher m = p.matcher(line); 
} 
+0

Попробуйте эту ссылку, http://stackoverflow.com/questions/2276200/cha nging-default-encoding-of-python. Знаете ли вы, что такое байтовое представление ž? – JustinDanielson

ответ

5

Вместо этого регулярное выражение:

Pattern.compile("[\\w']+") 

Использование Unicode на основе:

Pattern.compile("[\\p{L}']+") 

Это происходит потому, что по умолчанию \\w в Java соответствует только символы ASCII, цифры 0-9 и подчеркивания.

Другой вариант является использование модификатора

Pattern.UNICODE_CHARACTER_CLASS 

Как это:

Pattern.compile("[\\w']+", Pattern.UNICODE_CHARACTER_CLASS) 
+0

Спасибо, сэр, это работает! – DRastislav

+0

Добро пожаловать, рад, что это сработало для вас. – anubhava

+1

@DRastislav Если это правильный ответ, отметьте его как принятый. – aldux

-1

\\ ш соответствует только AZ, AZ и 0-9 (английский алфавит плюс цифры) если вы хотите принять любой символ, кроме пробелов, как часть слова, используйте \\ S

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