关于#Java#的问题,如何解决?字符串获取数字并进行运算

编写一个Java方法,接受一个输入字符串并计算收入减去费用。

收入组成部分用数字表示;而你的消费支出都是以“-”开头的数字,输入字符串可以包含小写字母和大写字母,以及其他字符。
这是学校的一个问题,我对其进行作答后发现我写了一座屎山出来,有没有可以提供不同的思路来简化这一程序来实现目的
样例1.
int netIncome = calcNetIncome("salary 15000yuan bonus2000 rent -1000Y");
System.out.println("Net Income = " + netIncome);
Net Income = 16000
样例2.
int netIncome = calcNetIncome("25000 gross income, -200 water, electricity:-300");
System.out.println("Net Income = " + netIncome);
Net Income = 24500

public static int calcNetIncome(String input) {
        int totalincome=0;//定义总收入为0
        String mins="-";
        Character min=mins.charAt(0);//获取char-
        String numsP="";
        String minnums="-";//定义两个字符串
        int i=0;
        int o=0;
        int sum1=0;
        int sum2=0;
        for (int j=0;j();j++){
            if (input.charAt(j)==min){//进行负数的取数
                for (int t=j;t();t++){
                    if (Character.isDigit(input.charAt(t))==true){//如果当前字符是数字
                        minnums=minnums+input.charAt(t);//字符串的堆叠
                        int[] all=new int[i+2];
                        if (t+1()){
                            if (Character.isDigit(input.charAt(t+1))==false){//当前字符的后一位不是数字,输出数字
                                all[i]=Integer.parseInt(minnums);
                                i=i+1;
                                minnums= "-";
                                j=t;
                                for (int p=0;p[p];
                                }
                                break;
                            }
                        }else if (t==input.length()-1&&Character.isDigit(input.charAt(t))==true){//当最后的字符为数字
                            all[i]=Integer.parseInt(minnums);
                            i=i+1;
                            minnums="-";
                            j=t;
                            for (int p=0;p[p];
                            }
                            break;
                        }
                    }
                }//停止循环负数获取
            }else {
                if (Character.isDigit(input.charAt(j))==true){//正数
                    numsP=numsP+input.charAt(j);
                    int[] all2=new int[o+2];
                    if (j+1()){
                        if (Character.isDigit(input.charAt(j+1))==false) {
                            all2[o] = Integer.parseInt(numsP);
                            o=o+1;
                            numsP = "";
                            for (int p=0;p[p];
                            }
                        }
                    } else if (j==input.length()-1&&Character.isDigit(input.charAt(j))==true) {
                        all2[o] = Integer.parseInt(numsP);
                        o=o+1;
                        numsP = "";
                        for (int p=0;p[p];
                        }
                    }
                }
            }
        }
        totalincome=sum2+sum1;
        return totalincome;//返回总收入
    }

思路就是用循环来走,分别储存正数和负数,最后相加

我的比你简单点吧,没有你那么多,仅供参考

public static int cal(String input) {
        char[] chars = input.toCharArray();
        StringBuilder sb1 = new StringBuilder(); // 正数的字符串,用 , 隔开
        StringBuilder sb2 = new StringBuilder(); // 负数的字符串,用 , 隔开
        for (int i = 0; i < chars.length; i++) {
            if (Character.isDigit(chars[i]) || chars[i] == '-') {
                if (chars[i] == '-') {
                    // 负数,要从下一个下标开始,所以是i+1
                    i = i+1;
                    // 循环到不是数字结束,然后拼接搭配字符串里面,加上 ,
                    while (i <chars.length && Character.isDigit(chars[i])) {
                        sb1.append(chars[i]);
                        i++;
                    }
                    sb1.append(",");
                } else {
                    // 正数 
                    // 循环到不是数字结束,然后拼接搭配字符串里面,加上 ,
                    while (i <chars.length && Character.isDigit(chars[i])) {
                        sb2.append(chars[i]);
                        i++;
                    }
                    sb2.append(",");
                }
            }
        }
        // 计算和,再相减
        String s1 = sb1.toString();
        String s2 = sb2.toString();
        // 用逗号切割出数组,然后相加
        String[] split1 = s1.split(",");
        String[] split2 = s2.split(",");
        int sum1 = 0;
        for (String s : split1) {
            sum1 += Integer.valueOf(s);
        }
        int sum2 = 0;
        for (String s : split2) {
            sum2 += Integer.valueOf(s);
        }
        return sum2 - sum1;
    }

    public static void main(String[] args) {
        System.out.println(cal("25000 gross income, -200 water, electricity:-300"));
    }