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
相关产品推荐
相关产品推荐

