Нахождение суммы НОМЕРОВ в строке? - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно найти сумму чисел в строке, которая содержит «az», «0-9» и «-», если есть «-» перед числом, которое я считаю этим числом как отрицательное.Например, у меня есть этот текст:

asd-12sdf45-56asdf100, сумма чисел -12,45,-56 and 100 равна 77.

Мне удалось заменить все буквы, и оно вышло -12 45-56 100,и я застрял здесь.Я попытался разбить на массив, а затем parseInt, я пробовал некоторые вещи с циклами, но тупик ... Любая помощь?

Это может быть не весь код;если вы дадите намек, я сам все пойму.

Вот код, который я написал до сих пор.

String text = "asd-12sdf45-56asdf100";
String numbers = text.replaceAll("[a-zA-Z]+", " ");
String[] num = numbers.trim().split("[ ]");

int sum = 0;
for (int index = 0; index < num.length; index++) {
    int n = Integer.parseInt(num[index]);
    sum += n;
}
System.out.println(sum);

PS: Я все еще в началемоего ИТ-образования, так что держите его как можно проще: D Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

Вы можете использовать регулярные выражения, чтобы соответствовать числам, которые могут встречаться в строке.Регулярное выражение, которое я использую, основано на предположении, что числа могут встречаться с или без отрицательного знака в строке.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        final String regex = "[-]*[0-9]+";
        final String string = "asd-12sdf45-56asdf100";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        int sum = 0;

        while (matcher.find()) {
            System.out.println("Found number: " + matcher.group(0));
            sum += Integer.parseInt(matcher.group(0));
        }

        System.out.println("Sum = "+sum);
    }
}

Output : 

Found number: -12
Found number: 45
Found number: -56
Found number: 100
Sum = 77
0 голосов
/ 25 октября 2018

Это звучит очень похоже на домашнее задание для вас, чтобы выучить регулярные выражения.Поэтому я не собираюсь отвечать за это для вас.Но вы можете найти инструмент, подобный следующему, полезный для игры с регулярными выражениями:

Также есть множество ресурсов, чтобы прочитать о том, как использовать регулярные выражения:

0 голосов
/ 25 октября 2018

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

0 голосов
/ 25 октября 2018
String s = "-12 45-56 100";
int sum = Stream.of(s.replaceAll("-", " -").split(" ")).filter(e -> !"".equals(e)).mapToInt(Integer::parseInt).sum();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...