我有一个字符串,其中包含数字和字符以及特殊符号。但我需要计算字符串中的数字总和。 假设我的字符串是
String input = "step@12test_demo,9,8*#1234/add2doe";
结果应该是12 + 9 + 8 + 1234 + 2 = 1265但是对于我的代码我得到的结果为1 + 2 + 9 + 8 + 1 + 2 + 3 + 4 + 2 = 32。这是我的代码
public class sumOfNumInString {
public static void main(String[] args) {
String input = "step@12test_demo,9,8*#1234/add2doe";
String output = "";
int temp = input.length();
for (int i = 0; i < temp; i++) {
Character c = input.charAt(i);
if (Character.isDigit(c)) {
output = output + c;
}
}
int result = Integer.parseInt(output);
System.out.println(result);
int num = result, sum = 0, r;
for (; num != 0; num = num / 10) {
r = num % 10;
sum = sum + r;
}
System.out.println("Sum of digits of number: " + sum);//32
//Need output as :12+9+8+1234+2= 1265
}
}
答案 0 :(得分:4)
您需要确定要添加的数字序列,因为此时您正在将单个字符添加为数字。将字符串与正则表达式匹配以提取数字,然后解析并添加它们应该有效。
private static final Pattern pattern = Pattern.compile("\\d+");
public static int total(String input) {
Matcher matcher = pattern.matcher(input);
int total = 0;
while (matcher.find()) {
total += Integer.parseInt(matcher.group(0));
}
return total;
}
使用输入字符串调用时返回1265。
感谢Francesco的小费!
答案 1 :(得分:0)
您应该加入连续的数字。您可以构建一个包含数字和操作的字符串,然后分析它。
String res = "";
for (int i = 0; i < temp; i++) {
Character c = input.charAt(i);
if (Character.isDigit(c)) {
res += c.toString();
}else{
if(! (res.charAt(res.length() - 1).equals('+')) ) res+= '+';
}
}
现在您可以使用StringTokenizer
解析String resStringTokenizer st = new StringTokenizer("+ ");
int sum = 0;
String number = "";
while(st.hasMoreTokens()) {
number = st.nextToken();
sum += Integer.parseInt(number);
}
答案 2 :(得分:0)
如果您对正则表达式解决方案不感兴趣,可以简单地遍历所有字符,如果是数字,则将其添加到包含所有连续数字的缓冲区。当前字符不是数字时,我们需要重置缓冲区并处理其先前的争用(包括其当前存储的数字总和)。为此,您可以选择将char连接到String。最简单和首选的方法是使用StringBuilder。
public static int sumOfNumbers(String input) {
int sum = 0;
StringBuilder sb = new StringBuilder();
for (char ch : input.toCharArray()) {
if (Character.isDigit(ch)) {
sb.append(ch); //add character to buffer -> "12"+'3'= "123"
} else if (sb.length() > 0) {
sum += Integer.parseInt(sb.toString());//increase sum based on current number
sb.delete(0, sb.length()); // reset buffer for new number
}
}
return sum;
}
用法
public static void main(String[] args) throws Throwable {
String input = "step@12test_demo,9,8*#1234/add2doe";
System.out.println("Sum of numbers: " + sumOfNumbers(input));// 1265
}
输出:
Sum of numbers: 1265