Java模式与组

时间:2013-02-08 21:54:36

标签: java regex regex-group

我有这种模式:

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

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

2 个答案:

答案 0 :(得分: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));
        }
    }

答案 1 :(得分:0)

也许您可以改用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'
}