Метод, который принимает текст строки и возвращает сумму идентифицированных целых чисел - PullRequest
0 голосов
/ 24 сентября 2019

Метод должен взять текст строки, идентифицировать все целые числа в строке и вернуть сумму идентифицированных целых чисел.

Например, строка «a2.05h34-9fmq26» содержит целые числа 2, 5 (05), 34, -9 и 26, поэтому метод должен возвращать 58. Пока у меня есть следующий код:

public static int sumOfIntegers(String text) {
       int sum = 0;

       for(int i = 0; i < text.length(); i++) {
           if(Character.isDigit(text.charAt(i)))
               sum = sum + Character.getNumericValue(text.charAt(i));
       }
       return sum;
}

Пока я могу суммировать все натуральные числа, но яЯ не уверен, как вычесть отрицательные целые числа из суммы.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете использовать регулярное выражение , чтобы найти группу цифр:

String s = "a2.05h34-9fmq26";
Pattern p = Pattern.compile("-?\\d+");
Matcher matcher = p.matcher(s);

int result = 0;
while (matcher.find()) {
    result += Integer.parseInt(matcher.group());
}

System.out.println(result);

Выход

58

Шаблон -?\d+ означает совпадение группы из одной или нескольких цифр, которым может предшествовать дефис.Подробнее о паттерне можно найти в документации.

0 голосов
/ 25 сентября 2019

Должно быть очевидно, что вы не можете получить число, подобное 34, если вы суммируете цифры по одной за раз.Вам нужно будет следить за последовательными цифрами, с которыми вы столкнулись, и добавлять их к сумме только в том случае, если вы встретите не цифру или конец строки.

int sum = 0;

int currentValue = 0;
boolean negative = false;

for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);
    if (Character.isDigit(c)) {
        int digitValue = Character.getNumericValue(text.charAt(i));

        currentValue = currentValue * 10;

        if (negative) {
            currentValue = currentValue - digitValue;
        } else {
            currentValue = currentValue + digitValue;
        }
    } else {
        sum = sum + currentValue;
        currentValue = 0;
        negative = (c == '-');
    }
}

sum = sum + currentValue;

return sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...