正则表达式读取字符串matcher.matches第一个字符串不匹配正确

时间:2009-07-26 08:21:41

标签: java regex

有人帮助我 我有一个包含以下

的文件
a                       // true
тодорхойгүй гишүүн\n    // false
ямар нэг                // false
нэгэн                   // false
a good deal             // true
нэлээн                  // false
a long face             // true
уруу царай              // false
...

我的java代码

while ((strLine = br.readLine()) != null) { 
 // string from file

                Pattern pattern = Pattern.compile("[\\sa-zA-Z]{1,}");
                Matcher matcher = pattern.matcher(strLine);
                if (matcher.matches()) {
                    System.out.print(true+ "\n");
                } else {
                    System.out.print(false + "\n");
                    }
            }

输出

false // there is problem this line must true 
false
false
false
true
false
true
false

为什么第一次不匹配。

I inserted blank line into start of file then output

false
true   // this line was false before i insert blank line
false
false
false
true
false
true
false

4 个答案:

答案 0 :(得分:2)

很奇怪。您可能希望尝试使用hexdump仔细检查文件的前几行:

head -2 file | hexdump -C

这应该告诉你行的开头确切的字节数。

答案 1 :(得分:0)

你试过[\ sa-zA-Z] +

吗?

答案 2 :(得分:0)

前两行

a
тодорхойгүй гишүүн

hexdump都

0000-0010:  ef bb bf 61-0d 0a d1 82-d0 be d0 b4-d0 be d1 80  ...a.... ........
0000-0020:  d1 85 d0 be-d0 b9 d0 b3-d2 af d0 b9-20 d0 b3 d0  ........ ........
0000-0029:  b8 d1 88 d2-af d2 af d0-bd                       ........ .

答案 3 :(得分:0)

我通过删除前三个非ascii代码解决了这个问题。