Java计算器如何按多种运算符分割含空格的输入字符串
计算器字符串解析逻辑实现方案
现有代码的核心问题:
- 仅支持
+作为唯一分割符,无法适配多运算符场景 - 未处理输入中的空白字符,带空格的输入会导致类型转换报错
- 用
Integer.parseInt转换double类型,不支持小数输入,且类型不匹配
实现思路
你可以用正则环视匹配做分割,提前清理输入中的所有空白字符,即可同时满足多运算符拆分、空格兼容的需求,拆分后得到的数组会按「数字、运算符、数字」的顺序交替排列,直接满足你要同时存数字和运算符的要求。
完整实现代码
import java.util.ArrayList; import java.util.List; public class CalculatorParser { // 可按需扩展支持的运算符,比如%、^等 private static final String SUPPORTED_OPERATORS = "+-*/"; public static Object[] parseInput(String input) { // 移除所有空白字符,直接解决数字与运算符之间带空格的问题 String cleanedInput = input.replaceAll("\\s+", ""); // 环视正则分割:在运算符的前后位置切割,不会丢弃运算符本身 String[] splitPieces = cleanedInput.split("(?<=[" + SUPPORTED_OPERATORS + "])|(?=[" + SUPPORTED_OPERATORS + "])"); List<Object> result = new ArrayList<>(); for (String piece : splitPieces) { if (SUPPORTED_OPERATORS.contains(piece)) { // 是运算符直接存入 result.add(piece); } else { // 是数字转double存入,支持整数、小数输入 result.add(Double.parseDouble(piece)); } } return result.toArray(); } // 测试示例 public static void main(String[] args) { Object[] parseResult = parseInput("1 + 3 - 2 * 5.5 / 2"); // 输出结果:1.0 + 3.0 - 2.0 * 5.5 / 2.0 for (Object item : parseResult) { System.out.print(item + " "); } } }
扩展说明
如果需要支持负数输入(比如-1 + 3这类以负号开头的表达式),可以加个额外判断:如果分割后的第一个元素是空字符串,就把第二个元素的数字转为负数即可。如果需要处理运算优先级,拆分完成后转逆波兰表达式再计算即可。
内容的提问来源于stack exchange,提问作者Kyle Zeller
相关产品推荐
相关产品推荐

