我正在编写一个普通的程序。我有如下输出
红5绿5蓝10白15
我想对输出中的数字求和。总和是35
我写了下面的逻辑,但是程序返回了17,这是正确的,因为下面的逻辑考虑了数字。
关于我如何使程序理解两位数,您能否指导我?这样我才能得到正确的总和?
for (int i =0; i < output.length(); i++)
{
{
sum=sum+Character.getNumericValue(grps.charAt(i))
}
}
谢谢
答案 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);
这适用于任意位数的数字。