У меня есть строка «AB12TRHW4TR6HH58», мне нужно разделить эту строку, и всякий раз, когда я нахожу число, мне нужно выполнить сложение всего. Однако, если есть последовательные числа, мне нужно принять их как целое число. Например, в приведенной выше строке сложение должно выполняться как 12 + 4 + 6 + 58 и так далее.
Я написал ниже код, который складывает все числа по отдельности, но не может принимать целое число. Не могли бы вы помочь?
public class TestClass {
public static void main(String[] args) {
String str = "AB12TRHW4TR6HH58";
int len = str.length();
String[] st1 = str.split("");
int temp1=0;
for(int i=0;i<=len-1;i++){
if (st1[i].matches("[0-9]")){
int temp = Integer.parseInt(st1[i]);
temp1 = temp+temp1;
}
}
System.out.println(temp1);
}
}
Разделите строку, используя буквы в качестве разделителей, вы получите массив десятичных чисел.




Вы можете разделить на нечисловые символы и использовать полученный массив:
String[] st1 = "AB12TRHW4TR6HH58".split("[^0-9]+");
int temp1 = 0;
for (int i = 0; i < st1.length; i++) {
if (st1[i].isEmpty()) {
continue;
}
temp1 += Integer.parseInt(st1[i]);
}
System.out.println(temp1);
И это можно даже упростить с помощью потока:
int temp1 = Stream.of(st1)
.filter(s -> !s.isEmpty())
.mapToInt(Integer::new)
.sum();
Работает отлично. Большое спасибо
Делая то, что я сказал в своем комментарии:
String str = "AB12TRHW4TR6HH58";
String[] r = str.split("[a-zA-Z]");
int sum = 0;
for ( String s : r ) {
if ( s.length() > 0 ) {
sum += Integer.parseInt(s);
}
}
System.out.println(sum);
Большое спасибо Стефану. Это прекрасно работает и очень легко понять
Вместо того, чтобы разделять части, которые вы хотите опустить, просто ищите то, что вам нужно: числа. Используя Matcher и Stream, мы можем сделать это так:
String str = "AB12TRHW4TR6HH58";
Pattern number = Pattern.compile("\\d+");
int sum = number.matcher(str)
.results()
.mapToInt(r -> Integer.parseInt(r.group()))
.sum();
System.out.println(sum); // 80
Или с дополнительным сопоставлением, но с использованием только ссылок на методы:
int sum = number.matcher(str)
.results()
.map(MatchResult::group)
.mapToInt(Integer::parseInt)
.sum();
Возможный дубликат Найдите все числа в строке