我想用regex
在java
提取一些信息出来的字符串。对于演示,我有以下内容(看似愚蠢的代码):
Pattern featureIndexValuePattern = Pattern.compile("([\\w_ \\-\\.\\=]+)\\s+(\\d+)");
String str = "member_currentCompany9042547 0";
String str1 = "member_currentCompany9042547 0";
Matcher match = featureIndexValuePattern.matcher(str);
if (match.find()) {
System.out.println("FOUND!");
System.out.println(match.group(0));
System.out.println(match.group(1));
System.out.println(match.group(2));
}
match = featureIndexValuePattern.matcher(str1);
if (match.find()) {
System.out.println("FOUND!");
System.out.println(match.group(0));
System.out.println(match.group(1));
System.out.println(match.group(2));
}
我得到的输出是
FOUND!
9042547 0
9042547
0
FOUND!
member_currentCompany9042547 0
member_currentCompany9042547
0
实际上,两个输入字符串完全相同,除了第一个是从文件复制粘贴而后者是硬编码的。我无法找到输出为何不同的原因。我怀疑这是字符编码。有人可以帮助我了解这里发生的事情吗?
谢谢,Nikhil
执行时,遵循Andy Turner
评论中的建议
Arrays.toString(str.toCharArray())
我可以看到非打印unicode字符(在9之前):
str: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, , 9, 0, 4, 2, 5, 4, 7, , 0]
str1: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, 9, 0, 4, 2, 5, 4, 7, , 0]
添加\\p{C}
到模式可以解决此问题。
尼基尔
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句