如何计算字符串中所有数字的总和?在下面的示例中,预期结果为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);
}
答案 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美分-最快的变种