计算字符列表中的两位数

时间:2018-12-09 00:29:21

标签: java groovy

我正在编写一个普通的程序。我有如下输出

  

红5绿5蓝10白15

我想对输出中的数字求和。总和是35

我写了下面的逻辑,但是程序返回了17,这是正确的,因为下面的逻辑考虑了数字。

关于我如何使程序理解两位数,您能否指导我?这样我才能得到正确的总和?

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

谢谢

4 个答案:

答案 0 :(得分:3)

由于您也标记了[groovy]:

您可以使用正则表达式/\d+/在字符串中“找到所有”数字字符串,将它们全部转换为数字,最后sum()。例如

def sumNumberStrings(s) {
    s.findAll(/\d+/)*.toLong().sum()
}
assert 35==sumNumberStrings("red 5green 5blue 10white 15")

答案 1 :(得分:0)

我将使用正则表达式将所有非数字替换为一个空格,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

答案 2 :(得分:0)

显然我不能在注释中编写代码,但仅是继续回答,您可以进一步讲解并使用斜杠,删除分号和System.out。

 php bin/console cache:clear --env=prod --no-debug

答案 3 :(得分:0)

不需要使用正则表达式或其他复杂功能的简单算法就是这样:

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

这适用于任意位数的数字。