小编典典

在文本中查找数字并将其求和

java

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

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,因此我可以看到打印了“匹配”。但是,当我尝试获取期望的数字分组时,什么也没打印出来。

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


阅读 364

收藏
2020-11-30

共1个答案

小编典典

只需按组提取数字,而不必担心空格。

public static void main(String[] args) throws Exception {
    String source = " abc 2 de fdfg 3 4 fdfdfv juk  @  dfdfgd 45";

    // "\\d+" will get all of the digits in the String
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(source);

    int sum = 0;
    // Convert each find to an Integer and accumulate the total
    while (matcher.find()) {
        sum += Integer.parseInt(matcher.group());
    }
    System.out.println("Sum: " + sum);
}

结果:

总计:54

2020-11-30