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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:04