Вы можете использовать Matcher с этим регулярным выражением \d+
, чтобы сопоставлять только цифры вместо разделения, ваш код может выглядеть следующим образом:
String str = "Test123 is12 good123";
int total = 0;
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(str);
while (m.find()) {
total += Integer.parseInt(m.group());
}
System.out.println("Total of above string is: " + total);//Total of above string is: 258
Если вы используете Java9 +, вы можете просто использовать:
String str = "Test123 is12 good123";
int total = Pattern.compile("\\d+").matcher(str)
.results()
.mapToInt(m -> Integer.valueOf(m.group())).sum();
Если вы настаиваете на использовании split, вы можете использовать это регулярное выражение [^\d]+
, которое будет соответствовать всем не цифрам, но вам все равно нужно проверить, не содержит ли массив пустые значения, ваш код может выглядеть следующим образом:
String str = "Test123 is12 good123";
int total = 0;
String[] m = str.split("[^\\d]+");
for (String s : m) {
if (!s.equals("")) {
total += Integer.parseInt(s);
}
}
System.out.println("Total of above string is:" + total);