我正嘗試使用Java的命名捕獲組來從字符串中提取整數。我知道還有其他更簡單的方法來提取數字,但我想使用正則表達式,因爲我想確保字符串的其餘部分與模式匹配。儘管匹配找不到Java命名的捕獲組
line = "Data: 5 Total";
Pattern p = Pattern.compile("(Data: (?<value>\\d+) Total)");
Matcher m = p.matcher(line);
assert m.matches();
String value = m.group("value");
上面的代碼失敗的回報,Exception in thread "main" java.lang.IllegalStateException: No match found
唯一組被捕獲是完整的輸入字符串,"Data: 5 Total"
。 爲什麼內部命名組"value"
未被捕獲?
你爲什麼使用'assert'?整個斷言的觀點是,它們可以在運行時啓用或禁用,而不會改變結果([ref](http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html ))。對於正常的控制流程,它們不是**。來想一想,你怎麼知道它捕獲了完整的輸入字符串?如果'assert m.matches();'行沒有被執行,'m.group()'應該像m.group(「value」)那樣拋出一個IllegalStateException異常。 – 2014-10-30 07:07:40
你說得對。我不明白當我寫這篇文章時''assert'是如何工作的。我現在已經完全取代了它。 – navari 2014-10-30 07:51:43
@Alan我現在的理解是,我應該使用if語句並在else塊中拋出異常。它是否正確? – navari 2014-10-30 07:57:59