我很困惑我的匹配器的find()方法返回比我認爲我的正則表達式會創建更多的匹配。下面是我寫的JUnit測試,試圖將其散列出來。所有的測試都通過了,但我不明白爲什麼我的find()返回匹配的組(1)值爲null或空(請參閱//爲什麼更多find()比實際匹配?matcher.find()匹配太多
public class JustTheDigits {
@Test
public void testJustTheDigits() {
doTest("DV_APLCN: 563 ,DV_DHR_APLCN: 5632, PIC_NOTE: 6254", new ArrayList<Integer>(Arrays.asList(563, 5632, 6254)));
doTest("563 ,DV_DHR_APLCN: 5632, PIC_NOTE", new ArrayList<Integer>(Arrays.asList(563, 5632)));
doTest("hello 563 jello", new ArrayList<Integer>(Arrays.asList(563)));
doTest("Hello World", new ArrayList<Integer>());
}
private void doTest(String candidate, List<Integer> expected) {
List<Integer> actual = justTheDigits(candidate);
assertEquals(expected, actual);
}
private static Pattern pattern = Pattern.compile("(\\d+)?");
public List<Integer> justTheDigits(String input) {
List<Integer> listOfDigits = new ArrayList<Integer>();
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String s = matcher.group(1);
// Why more find()s than actual matches?
if (s != null && "".equals(s) == false) {
listOfDigits.add(Integer.parseInt(s));
}
}
return listOfDigits;
}
}
什麼,如果有的話,我可以做我的正則表達式,以避免流血不爲空或空管檢查?
唉,geez。這很容易。我喜歡RegEx。我與RegEx爭鬥。謝謝。 – 2012-01-19 01:34:27
不用擔心,它花了我幾年時間才弄明白! – 2012-01-19 01:39:01