Java程序,用于获取字符串中存在的整数之和,并考虑其中一个整数在极限端存在

Java程序,用于获取字符串中存在的整数之和,并考虑其中一个整数在极限端存在,java,Java,我想得到字符串“abc22gh20fg4”中的整数之和。我希望我的输出为22+20+4=46 我已经编写了如下代码,但它给出了22+20=44。它没有考虑最后的数字 public static void main(String[] args) { String str = "abc22gh20fg4"; String num = ""; int sum = 0; for (int i = 0; i < str.length(); i++) {

我想得到字符串“abc22gh20fg4”中的整数之和。我希望我的输出为
22+20+4=46

我已经编写了如下代码,但它给出了
22+20=44
。它没有考虑最后的数字

public static void main(String[] args) {

    String str = "abc22gh20fg4";
    String num = "";
    int sum = 0;
    for (int i = 0; i < str.length(); i++) {
        if (Character.isDigit(str.charAt(i))) {
            num = num + str.charAt(i);
        } else {
            if (!num.equals("")) {
                sum = sum + Integer.parseInt(num);
                num = "";
            }
        }
    }
    System.out.println(sum);
}
publicstaticvoidmain(字符串[]args){
字符串str=“abc22gh20fg4”;
字符串num=“”;
整数和=0;
对于(int i=0;i
如果字符是数字,则追加此行

  sum=sum+Integer.parseInt(num); one more time just after for loop

可以使用正则表达式对整数进行迭代:

String str = "abc22gh20fg4";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(str);
int sum = 0;
while (m.find()) {
    sum += Integer.parseInt(m.group());
}
System.out.println(sum); // Output: 46

我会选择split而不是deep for loop:

    String str = "abc22gh20fg4";
    String regex = "[^\\d]+"; // this will extract only digit
    String[] strs = str.split(regex);
    int sum = Arrays.stream(strs)
            .filter(digits -> digits != null && !digits.equals(""))
            .mapToInt(Integer::parseInt).sum();

    System.out.println(sum);
如果你想在Java8之前

    String str = "abc22gh20fg4";
    String regex = "[^\\d]+";
    String[] strs = str.split(regex); // this will extract only digit 
    int sum = 0;
    for (String digits:strs) { // iterate each digits
        if (digits!=null && !digits.equals("")){ // check null or empty
            sum += Integer.parseInt(digits); // parse and sum
        }
    }

    System.out.println(sum);
更新:

实际的问题是,当您循环遍历所有字符时,最后一个字符是数字。它不带
sum
退出循环,因此您需要检查它是否是最后一位数字sum it

public class Test {
    public static void main(String[] args) {

        String str = "abc22gh20fg4";
        String num = "";

        int sum = 0;
        for (int i = 0; i < str.length(); i++) {
            if (Character.isDigit(str.charAt(i))) {
                num = num + str.charAt(i);

                if (i==str.length()-1){ // check if it is last 
                    sum = sum + Integer.parseInt(num);
                }

            } else {
                if (!num.equals("")) {
                    sum = sum + Integer.parseInt(num);
                    num = "";
                }
            }
        }
        System.out.println(sum);
    }
}
公共类测试{
公共静态void main(字符串[]args){
字符串str=“abc22gh20fg4”;
字符串num=“”;
整数和=0;
对于(int i=0;i
公共静态void main(字符串[]args){
int totalIntegerValue=0;
字符串currentStringValue=“”;
字符串totalStringValue=“”;
扫描仪s=新的扫描仪(System.in);
字符串输入=s.nextLine();

对于(In i=0;你怎么知道它是22,而不是2和2?为什么编码这样的东西可能是讨厌的通常是因为模糊的要求你调试了你的代码去看哪里出了问题?请考虑在你发布问题时缩进你的代码,这将帮助我们阅读它!欢迎来到BTWE,在Telmin之后需要做最后的添加。循环结束后,如果最后一个字符是一个数字,则需要检查“num”字符串以查看它是否有任何数字,但您必须检查第一个num是否为空!不要忘记检查字符串是否为空。无需在流操作中执行
null
检查。如果字符串为null,则应用程序无论如何都会在拆分操作中失败。缩短版本
Arrays.stream(numbers).filter(e->!e.isEmpty()).mapToInt(Integer::parseInt).sum()
public static void main(String[] args) {

    int totalIntegerValue=0;        
    String currentStringValue="";
    String totalStringValue="";
    Scanner s = new Scanner(System.in);
    String input = s.nextLine();
    for(int i=0; i<input.length(); i++) {
        if(Character.isDigit(input.charAt(i))) {
            currentStringValue+=input.charAt(i);
            totalIntegerValue+=Integer.parseInt(currentStringValue);
            totalStringValue+=currentStringValue+"+";
        }
        else
        {           
            currentStringValue="";
        }
    }
    System.out.println(totalStringValue.substring(0, totalStringValue.length()-1)+"="+totalIntegerValue);
    s.close();
}