1

我在使用正则表达式时遇到了以下问题:我编写了一个程序,它从一些文本(txt)文件中读取单词并写入另一个文件,每行写一个单词。

一切正常,除非读取的单词中有特殊字符ľščťžýáíé。正则表达式删除字符并拆分特殊字符所在的单词。

例如:
输入:

I am Jožo.

输出:

I
am
Jo
o

这是代码片段:

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

2 回答 2

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)
于 2013-07-11T20:44:31.253 回答
-1

\\w 仅匹配 az、AZ 和 0-9(英文字母加数字)如果您想接受除空格以外的任何字符作为单词的一部分,请使用 \\S

于 2013-07-11T20:47:38.183 回答