如何计算字符串中所有数字的总和

时间:2014-02-21 14:26:25

标签: java

如何计算字符串中所有数字的总和?在下面的示例中,预期结果为4+8+9+6+3+5。我的尝试如下。我也可以计算那些可以被2整除的数字的总和吗?

String a="jklmn489pjro635ops";

    int sum = 0;

    String num = "";

    for(int i = 0; i < a.length(); i++) {
        if(Character.isDigit(a.charAt(i))) {
            num = num + a.charAt(i);
        } else {
            if(!num.equals("")) {
                sum = sum + Integer.parseInt(num);
                num = "";
            }
        }
    }

    System.out.println(sum);
}

12 个答案:

答案 0 :(得分:6)

将字符解析回String然后再转移到Integer太贵了,因为你已经有了一个字符。你应该尝试这样做:

 String a = "jklmn489pjro635ops";
 int sum = 0;
 int evenSum = 0;
 for (char c : a.replaceAll("\\D", "").toCharArray()) {
     int digit = c - '0';
     sum += digit;
     if (digit % 2 == 0) {
         evenSum += digit;
     }
 }
 System.out.println(sum);
 System.out.println(evenSum);

答案 1 :(得分:3)

这可能是一种简单而有效的方式:

static int sumFromString(String s){
       int sum = 0;
        for(int i = 0; i < s.length() ; i++){
            if( Character.isDigit(s.charAt(i)) ){
                sum = sum + Character.getNumericValue(s.charAt(i));
            }
        }
        return sum;
    }

另一种方法是将char转换为String然后转换为int,这样效率不高:

sum = sum + Integer.parseInt(s.charAt(i) + "");

答案 2 :(得分:1)

有点像这样......

import org.apache.commons.lang.StringUtils;

public static void main(String[] args) {

    String a = "jklmn489pjro635ops";

    int length = a.length();

    char c;
    int count = 0;
    for(int i=0;i<length;i++) {
        c  = a.charAt(i);
        if(StringUtils.isNumeric(String.valueOf(c))) {
            count = count + Integer.parseInt(String.valueOf(c));

        }
    }
    System.out.println(count);
}

答案 3 :(得分:1)

int sum = 0;
for(int i = 0; i < str.length()-1;){
  try{
    sum += Integer.parseInt(str.substring(i, ++i));
  }catch(Exception e){}
}

答案 4 :(得分:1)

这是您可以运行的完整主线示例。这应该回答您的问题以及评论中的所有问题。

import java.util.regex.*;
public class StringSum {
    public static void main(String[] args) {
        int sum = 0;
        Pattern pattern = Pattern.compile("([2468])"); // Who do we appreciate!
        Matcher matcher = pattern.matcher(args[0]);
        while (matcher.find()) {
            sum += Integer.parseInt(matcher.group(1));
        }
        System.out.println(sum);
    }
}

一些示例执行:

$ javac StringSum.java && java StringSum jklmn489pjro635ops
18
$ javac StringSum.java && java StringSum a1b2c3d4
6

答案 5 :(得分:1)

String a = "jklmn489pjro635ops";

int sum = 0;

for(int i = 0; i < a.length(); i++) {
    if(Character.isDigit(a.charAt(i))) {
        sum = sum + Integer.parseInt(a.charAt(i) + "");
    } 
}

System.out.println(sum);

答案 6 :(得分:1)

Scanner sc = new Scanner(System.in);

    System.out.println("Enter the String");

    String input = sc.next();

    int sum = 0;

    char[] c = input.toCharArray();

    for(int i = 0;i<=c.length-1;i++)
    {
      if(Character.isDigit(c[i]))
      {
          Character c1 = c[i];
          String s1 = c1.toString();
          int i1 = Integer.parseInt(s1);

          sum = sum+i1;
      }
    }
    System.out.println(sum);

答案 7 :(得分:1)

我认为这将是最简单和最简单的方式

static int sumOfString(String str){
    int sum = 0;
    for(int i=0; i<str.length(); i++){              
            if(Character.isDigit(str.charAt(i))){
                    sum+=str.charAt(i)-'0';
                }
        }
    return sum;
}

答案 8 :(得分:0)

    String input = "abc12xx3";
    Pattern pattern = Pattern.compile("[\\d]");
    Matcher matcher = pattern.matcher(input);
    int sum = 0;
    while(matcher.find()) {
        sum += Integer.parseInt(matcher.group());
    }
    return sum;

答案 9 :(得分:0)

int banana = 0;
String meow = "74387493";

for (int i = 0; i < meow.length(); i++) 
{
    String cows = ""+meow.charAt(i);
    int b =  Integer.parseInt(cows);
    banana = banana + b;
}

System.out.println(banana);

上面的代码会在字符串中添加所有数字(抱歉愚蠢的名字)。

答案 10 :(得分:0)

您可以通过使用正则表达式轻松地实现此目的,使用/ [a-zA-Z] /查找字母字符串并替换为”,以进行演示以显示我用php完成的程序。

<?php
$str = 'jklmn489pjro635ops';
$res = preg_replace('/[a-zA-z]/', '', $str);
$sum = 0;
for($i=0;$i<strlen($res);$i++){
    $sum += $res[$i];
}
echo $sum;//35
?>

答案 11 :(得分:0)

static int sumFromString(String str){
    int sum=0;
    for (char ch : str.toCharArray()){
        if (Character.isDigit(ch)){
            sum+=(ch-'0');
        }
    }
    return sum;
}

我的5美分-最快的变种