2013-02-08 63 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