我有这种模式:
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 :(得分: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'
}