【问题标题】:Java Pattern with groups带组的 Java 模式
【发布时间】:2013-02-08 21:54:36
【问题描述】:

我有这个模式:

    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;
    }

它找到的唯一组是最后一个组。

【问题讨论】:

  • 这是因为.matches() 每个输入只匹配一次。
  • Matcher#groupCount()返回匹配器模式中的捕获组数。
  • 您是否要对单个数字求和?!? "1234" = 1+2+3+4
  • @Bailey S 是的,我正在尝试这样做。

标签: java regex regex-group


【解决方案1】:

也许你可以使用 String 的“substring()”来代替?

见下面的例子:

public static void main(String[] args) {
    String stringOfNumbers = "AAA23211111111BBB";

    int sumOfDigits = 0;
    Matcher matcher = Pattern.compile("([0-9]{11})").matcher(stringOfNumbers);
    if (matcher.find()) {
        String extractedNumbers = matcher.group(1);
        for (int i = 0; i < extractedNumbers.length(); i++) {
            int oneDigit = Integer.parseInt(extractedNumbers.substring(i, i + 1));
            sumOfDigits += oneDigit;
        }
    }

    System.out.println("Sum of digits: " + sumOfDigits); // Output: 'Sum of digits: 15'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2012-04-25
    • 2023-03-13
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多