你能帮忙处理这段代码吗?
看似简单,却总是失败。
@Test
public void normalizeString(){
StringBuilder ret = new StringBuilder();
//Matcher matches = Pattern.compile( "([A-Z0-9])" ).matcher("P-12345678-P");
Matcher matches = Pattern.compile( "([\\w])" ).matcher("P-12345678-P");
for (int i = 1; i < matches.groupCount(); i++)
ret.append(matches.group(i));
assertEquals("P12345678P", ret.toString());
}
Run Code Online (Sandbox Code Playgroud)
构造 aMatcher不会自动执行任何匹配。这部分是因为Matcher支持两种不同的匹配行为,不同之处在于匹配是否隐式锚定到 s 区域的开头Matcher。看来你可以达到你想要的结果,如下所示:
@Test
public void normalizeString(){
StringBuilder ret = new StringBuilder();
Matcher matches = Pattern.compile( "[A-Z0-9]+" ).matcher("P-12345678-P");
while (matches.find()) {
ret.append(matches.group());
}
assertEquals("P12345678P", ret.toString());
}
Run Code Online (Sandbox Code Playgroud)
特别注意 的调用Matcher.find(),这是您的版本中的一个关键遗漏。此外,空值Matcher.group()返回与最后一个匹配的子字符串find()。
此外,虽然您的使用Matcher.groupCount()并不完全错误,但它确实让我怀疑您对它的作用有错误的想法。特别是,在你的代码中它总是会返回1——它询问模式,而不是与之匹配的内容。
| 归档时间: |
|
| 查看次数: |
18403 次 |
| 最近记录: |