JAVA: обработка строк с использованием функции разделения

У меня есть строка «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);

    }

}

Возможный дубликат Найдите все числа в строке

user9420984 16.10.2018 11:16

Разделите строку, используя буквы в качестве разделителей, вы получите массив десятичных чисел.

StephaneM 16.10.2018 11:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете разделить на нечисловые символы и использовать полученный массив:

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();

Работает отлично. Большое спасибо

Nit QA 16.10.2018 11:40
Ответ принят как подходящий

Делая то, что я сказал в своем комментарии:

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

Большое спасибо Стефану. Это прекрасно работает и очень легко понять

Nit QA 16.10.2018 11:40

Вместо того, чтобы разделять части, которые вы хотите опустить, просто ищите то, что вам нужно: числа. Используя 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();

Другие вопросы по теме