字符串中的数字总和不能正常工作

时间:2015-02-09 10:58:03

标签: java string

我有一个字符串,其中包含数字和字符以及特殊符号。但我需要计算字符串中的数字总和。 假设我的字符串是

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
    }
} 

3 个答案:

答案 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 res
StringTokenizer 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