Подсчет двойных цифр в списке символов - PullRequest
0 голосов
/ 09 декабря 2018

Я пишу отличную программу.У меня есть вывод, как показано ниже

красный 5green 5blue 10white 15

Я хочу суммировать цифры на выходе.Сумма будет 35

Я написал приведенную ниже логику, однако программа вернула 17, что правильно, так как приведенная ниже логика учитывает цифры.

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

for (int i =0; i < output.length(); i++)
    {
        {
            sum=sum+Character.getNumericValue(grps.charAt(i))
        }
    }

Спасибо

Ответы [ 4 ]

0 голосов
/ 09 декабря 2018

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

String output = "red 5green 5blue 10white 15";

// The result
int sum = 0;
// Sum of the current number
int thisSum = 0;
for (char c : output.toCharArray()) {
    // Iterate through characters
    if (Character.isDigit(c)) {
        // The current character is a digit so update thisSum so it includes the next digit.
        int digitValue = c - '0';
        thisSum = thisSum * 10 + digitValue;
    } else {
        // This character is not a digit, so add the last number and set thisSum 
        // to zero to prepare for the next number.
        sum += thisSum;
        thisSum = 0;
    }
}
// If the string ends with a number, ensure it is included in the sum.
sum += thisSum;

System.out.println(sum);

Это работает с числами любого количества цифр.

0 голосов
/ 09 декабря 2018

Очевидно, я не могу написать код в комментарии, но просто для того, чтобы продолжить с ответом, вы могли бы пойти немного дальше, используя косые строки, отбросить точки с запятой и System.out.

String output = "red 5green 5blue 10white 15"
int sum = 0

for (String token : output.replaceAll(/\D+/, " ").trim().split(/\s+/)) {
    sum += Integer.parseInt(token)
}

println(sum)
0 голосов
/ 09 декабря 2018

Поскольку вы также пометили [groovy]:

Вы можете "найти" все строки чисел в строке с помощью регулярного выражения /\d+/, превратить все из них в числа и, наконец, sum() их.например,

def sumNumberStrings(s) {
    s.findAll(/\d+/)*.toLong().sum()
}
assert 35==sumNumberStrings("red 5green 5blue 10white 15")
0 голосов
/ 09 декабря 2018

Я бы использовал регулярное выражение , чтобы заменить все нецифровые символы пробелом, trim(), чтобы удалить все начальные и конечные и пробелы, а затем разделить на (необязательно последовательные) пробелы;например,

String output = "red 5green 5blue 10white 15";
int sum = 0;
for (String token : output.replaceAll("\\D+", " ").trim().split("\\s+")) {
    sum += Integer.parseInt(token);
}
System.out.println(sum);

Выходы (согласно запросу)

35

Другой вариант будет Pattern, чтобы найти все последовательности из одной или нескольких цифр и сгруппировать их, а затем использовать циклразобрать и добавить в sum.Мол,

Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(output);
while (m.find()) {
    sum += Integer.parseInt(m.group(1));
}
System.out.println(sum);

Что также даст вам 35.

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