You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java栈处理字符串多位数问题:如何将多位数整体入栈

解决多位数拆分入栈的问题

你的问题出在每次只读取单个数字字符就入栈,没有处理连续数字字符组成多位数的情况。解决思路是遇到数字时,连续读取所有后续的数字字符,拼接成完整的数字字符串后再转成整数入栈,同时调整循环索引跳过已处理的数字字符。

修改后的完整代码如下:

public class Main {
    public static void main(String[] args) {
        String userInput = " (14 + 2 * 33)";
        System.out.println(evaluate(userInput));
    }

    public static int evaluate(String expression) {
        char[] tokens = expression.toCharArray();
        Stack<Integer> values = new Stack<>();

        for (int i = 0; i < tokens.length; i++) {
            // 跳过空格,避免干扰数字和符号判断
            if (tokens[i] == ' ') {
                continue;
            }

            // 处理数字(支持多位数)
            if (Character.isDigit(tokens[i])) {
                StringBuilder numStr = new StringBuilder();
                // 连续读取所有相邻的数字字符
                while (i < tokens.length && Character.isDigit(tokens[i])) {
                    numStr.append(tokens[i]);
                    i++;
                }
                // 将拼接好的数字字符串转为整数入栈
                values.push(Integer.parseInt(numStr.toString()));
                // 回退索引:因为while循环已将i移到非数字位置,避免for循环的i++跳过下一个字符
                i--;
            }
            // 后续可补充运算符、括号等逻辑处理
        }
        // 示例返回栈顶元素,可根据实际需求修改返回逻辑
        return values.isEmpty() ? 0 : values.peek();
    }
}

关键细节说明:

  • 新增空格跳过逻辑,避免输入中的空格影响数字识别
  • 用StringBuilder累加连续数字字符,确保多位数被完整拼接
  • 处理完连续数字后回退索引,防止for循环的自增操作跳过下一个需要处理的字符(比如运算符、括号)
  • 修改后,14、33这类多位数会以完整整数形式入栈,不再被拆分为单个数字

内容的提问来源于stack exchange,提问作者Mo Pie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:12:31