求字符串中所有整数的最小和

输入字符串s,输出s中包含所有整数的最小和。
说明:
字符串s,只包含 a-z A-Z ± ;
合法的整数包括
1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102
2)负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023
输入描述
包含数字的字符串
输出描述
所有整数的最小和
用例
输入
bb1234aa
输出
10
说明

输入
bb12-34aa
输出
-31
说明
1+2+(-34) = -31

       public static void answer() throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        char[] charArr=s.toCharArray();
        int res=0;
        for (int i = 0; i < charArr.length; i++) {
            char c = charArr[i];

            // 1. 排除字母和加号
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '+') {
                continue;
            }

            // 2. 处理减号(负数逻辑)
            if (c == '-') {
                // 只有后面紧跟数字才处理
                if (i + 1 < charArr.length && (charArr[i + 1] >= '0' && charArr[i + 1] <= '9')) {
                    i++; // 确认是负数,指针后移
                    StringBuilder sb = new StringBuilder("-");
                    while (i < charArr.length && (charArr[i] >= '0' && charArr[i] <= '9')) {
                        sb.append(charArr[i]);
                        i++;
                    }
                    res += Integer.parseInt(sb.toString());
                    i--; // 回退,抵消循环的i++
                }
                // 处理完或无效负号,都跳过,防止落入下方逻辑
                continue;
            }

            // 3. 剩下的必然是正整数的单个数字
            res += c - '0';
        }
        System.out.println(res);
    }
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务