如何在 Java 中正确解析并计算字符串形式的算术表达式

星浩姑娘_5871

星浩姑娘_5871

2026-11-13

386人浏览

原创

如何在 Java 中正确解析并计算字符串形式的算术表达式

本文介绍如何安全、规范地将字符串中的数字和运算符提取并计算,重点讲解 Integer.parseInt() 和 Double.parseDouble() 的适用场景、常见陷阱及完整表达式解析实现。

本文介绍如何安全、规范地将字符串中的数字和运算符提取并计算,重点讲解 `integer.parseint()` 和 `double.parsedouble()` 的适用场景、常见陷阱及完整表达式解析实现。

在 Java 中,并不存在 parseInt() 的静态方法直接作用于字符串之外的上下文——正确用法是 Integer.parseInt(String),它仅负责将符合整数格式的字符串(如 "123")转换为 int 值。但需注意:若字符串含空格、符号、小数点或非数字字符(如 "5 + 5" 整体),直接调用会抛出 NumberFormatException。因此,不能对整个表达式字符串调用 parseInt(),而必须先分词(tokenize),再分别解析操作数。

对于类似 "5 + 5" 这样的简单二元表达式,推荐采用基于空格分割的轻量解析策略。以下是一个健壮、可扩展的实现示例:

public class Calculate {
    public static void main(String[] args) {
        System.out.printf("5 + 5 = %.2f%n", calculate("5 + 5"));     // → 10.00
        System.out.printf("10 - 3.5 = %.2f%n", calculate("10 - 3.5")); // → 6.50
        System.out.printf("4 * 7 = %.2f%n", calculate("4 * 7"));       // → 28.00
    }

    public static double calculate(String input) {
        if (input == null || input.trim().isEmpty()) {
            throw new IllegalArgumentException("Input cannot be null or empty");
        }

        String[] tokens = input.trim().split("\s+"); // 按一个或多个空白字符分割
        if (tokens.length != 3) {
            throw new IllegalArgumentException(
                String.format("Invalid format: expected '<num><op><num>', got %d tokens", tokens.length)
            );
        }

        try {
            double operand1 = Double.parseDouble(tokens[0]);
            double operand2 = Double.parseDouble(tokens[2]);
            String operator = tokens[1];

            return switch (operator) {
                case "+" -> operand1 + operand2;
                case "-" -> operand1 - operand2;
                case "*", "x" -> operand1 * operand2;
                case "/", "÷" -> {
                    if (operand2 == 0) throw new ArithmeticException("Division by zero");
                    yield operand1 / operand2;
                }
                default -> throw new IllegalArgumentException(
                    "Unsupported operator: '" + operator + "'. Use +, -, *, or /"
                );
            };
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("Invalid number format in expression", e);
        }
    }
}</num></op></num>

✅ 关键实践建议:

javascript-typescript-typescript-scaffold
javascript-typescript-typescript-scaffold

你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

下载
  • ✅ 优先使用 Double.parseDouble():支持整数与小数(如 "3.14"),避免 parseInt() 因小数导致崩溃;
  • ✅ 始终 trim() 输入字符串:消除首尾空格干扰分割逻辑;
  • ✅ 校验 token 数量与结构:确保恰好 3 个部分(左操作数、运算符、右操作数);
  • ✅ 捕获 NumberFormatException 并友好提示:比让程序崩溃更符合教学/用户体验需求;
  • ❌ 避免手动遍历字符提取数字:易出错且难以处理负数(如 "-5 + 3")、多位数或空格不规则情况;

⚠️ 注意:本方案适用于单运算符、无括号、无优先级的简单表达式(即“计算器入门级”需求)。若后续需支持 3 + 5 * 2 等含运算符优先级的表达式,应升级为递归下降解析器或使用工具库(如 JEP、exp4j),而非依赖 parseInt 或简单分割。

总结:parseInt 本身不是“解析表达式”的工具,而是“转换单个整数字符串”的基础方法;真正的表达式解析需要分词 + 类型转换 + 运算调度三步协同——理解这一职责边界,是写出可靠计算器的第一步。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

12497

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

9602

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

8172

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1324

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

1048

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1576

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3269

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20511

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1415

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习