Как рассчитать сумму всех чисел в строке

Как рассчитать сумму всех чисел в строке? В приведенном ниже примере ожидаемым результатом будет 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);
}
-5
21 февр. '14 в 14:26
источник поделиться
10 ответов

Разбор символов обратно в 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);
+6
21 февр. '14 в 16:06
источник

Это может быть простым и эффективным способом:

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
02 февр. '16 в 13:22
источник

Я думаю, что это был бы самый простой и простой способ

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;
}
+1
15 авг. '17 в 12:52
источник
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);
+1
30 июл. '15 в 8:45
источник
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);
+1
16 июл. '15 в 11:31
источник
int sum = 0;
for(int i = 0; i < str.length()-1;){
  try{
    sum += Integer.parseInt(str.substring(i, ++i));
  }catch(Exception e){}
}
+1
21 февр. '14 в 14:39
источник

Что-то вроде этого..

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);
}
0
21 февр. '14 в 14:35
источник
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);

Вышеприведенный код добавит все числа в строку (извините за глупые имена).

0
16 сент. '14 в 22:53
источник
    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;
0
21 февр. '14 в 14:41
источник

Здесь вы можете запустить полный основной пример. Это должно ответить на ваш вопрос и все последующие вопросы в комментариях.

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
0
21 февр. '14 в 16:19
источник

Посмотрите другие вопросы по метке или Задайте вопрос