在文本中查找数字并将它们相加

时间:2015-05-31 19:48:47

标签: java regex

在这里寻求正则表达式专家。我有一个包含数字的字符串,例如

abc 2 de fdfg 3 4 fdfdfv juk  @  dfdfgd 45

我需要从这样的字符串中找到所有数字并总结一下。

我的Java代码如下:

public static void main(String[] args) {

    String source = " abc 2 de fdfg 3 4 fdfdfv juk  @  dfdfgd 45";

    Pattern pattern = Pattern.compile("[\\w*\\W*(\\d*)]+");
    Matcher matcher = pattern.matcher(source);

    if (matcher.matches()) {
        System.out.println("Matched");

            // For loop is not executed since groupCount is zero
            for (int i=0; i<matcher.groupCount(); i++) {
                String group = matcher.group(i);
                System.out.println(group);
            }
    } else {
        System.out.println("Didn't match");
    }
}

所以matcher.matches()返回true,因此我可以看到&#34;匹配&#34;打印。但是,当我试图获得群组时,期待数字,没有任何内容被打印出来。

有人可以指出我的正则表达式和分组部分有什么问题吗?

2 个答案:

答案 0 :(得分:2)

只需在组中提取数字,而不用担心空格。

set.seed(1); f3 <- sample(f1,10);
f3;
##  [1] g j n u e s w m l b
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
factor(c(f3,setdiff(1:nlevels(f3),as.integer(f3))),labels=levels(f3));
##  [1] g j n u e s w m l b a c d f h i k o p q r t v x y z
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z

结果:

  

总和:54

答案 1 :(得分:-1)

String[] arr=source.split("\\d+");
int sum=0;
for(String x : arr) {
  int n=0;
  try {
    n=Integer.parseInt(x);
  } catch(NumberFormatException nfe){}
  sum+=n;
}

System.out.println("Sum: "+sum);