2013-02-08 27 views
2

我有這樣的模式:Java的模式與團體

Pattern p = Pattern.compile("([0-9]){11}"); 

我的問題是如何從集團獲得所有數字和概括。 我與此代碼嘗試,但不工作:

Matcher matcher = p.matcher(field); 
    int result = 0; 

    if (matcher.matches()) { 
     for (int i = 0; i <= matcher.groupCount(); i++) { 
      String number = matcher.group(i + 1); 
      result += Integer.parseInt(number); 
     } 
     return result; 
    } else { 
     return -1; 
    } 

它找到的唯一的組是最後一組。

+0

這是因爲'.matches()'只有每輸入匹配了一次。 – 2013-02-08 21:58:45

+0

和['Matcher#groupCount()'](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#groupCount())返回捕獲組的數量在匹配者的**模式**中。 – jlordo 2013-02-08 21:59:49

+0

你是想總結個人的單個數字嗎?!? ''1234「= 1 + 2 + 3 + 4' – 2013-02-08 22:04:30

回答

3

這是因爲.matches()每個輸入只匹配一次。您想反覆調用.find()方法(api docs)。

Pattern p = Pattern.compile("([0-9]{11})"); 
Matcher matcher = p.matcher(field); 
int result = 0; 

while (matcher.find()) { 
     String number = matcher.group(1); 
     result += Integer.parseInt(number); 
} 

綜上所述圖案的個別數字匹配試試這個:

Pattern p = Pattern.compile("([0-9]{11})"); 
    Matcher matcher = p.matcher("12345678901"); 
    int result = 0; 

    if (matcher.matches()) { 
     String number = matcher.group(1); 
     for (char c : number.toCharArray()) { 
      result += Integer.parseInt(Character.toString(c)); 
     } 
    } 
+0

使用此模式,它僅查找所有數字(即字段=「12345678900」和matcher.group(1)=「12345678900」)。 – MAGx2 2013-02-08 22:24:00

+0

此代碼將只打印「9」 \t \t Pattern p = Pattern.compile(「([0-9]){11}」); \t \t String field =「44051401359」; \t \t Matcher matcher = p.matcher(field); (matcher.find()){ \t \t while(matcher.find()){ \t \t String number = matcher.group(1); \t \t System.out.println(number); \t \t} – MAGx2 2013-02-08 22:28:29

+0

這個答案是錯誤的獲取單個數字。我會做一些後處理來添加個人數字。示例即將出版。 – 2013-02-08 23:51:33