You need to enable JavaScript to run this app. Java中indexOfAny方法的替代方案?用于简易计算器识别运算符
优惠活动
大模型
产品
解决方案
定价
更多

Java中indexOfAny方法的替代方案?用于简易计算器识别运算符

Java简易计算器优化方案

需求说明

开发简易计算器时需要识别+、-、*、/四个运算符,Java没有内置indexOfAny方法,不想重复编写4次indexOf判断运算符位置,同时希望将现有多行switch运算逻辑替换为一行代码实现结果输出。

现有代码问题

现有代码中用input.charAt(1)获取运算符的逻辑只适用于两个个位数运算的场景,若输入多位数(如123+456)会取到错误字符,需要先修正运算符提取逻辑。

优化方案

1. 单条语句提取运算符

无需多次调用indexOf,直接通过正则替换掉所有数字即可得到运算符,适配任意位数的输入:

// 替换readInput方法中char operation = input.charAt(1); 一行
char operation = input.replaceAll("\\d", "").charAt(0);

2. 一行代码输出运算结果

方案A(JDK12及以上版本推荐)

直接使用switch表达式,无需break语句,直接返回运算结果:

// 替换原有全部switch代码块即可
System.out.println(switch (input.getOperation()) {
    case '+' -> input.getFirstNumber() + input.getSecondNumber();
    case '-' -> input.getFirstNumber() - input.getSecondNumber();
    case '*' -> input.getFirstNumber() * input.getSecondNumber();
    case '/' -> input.getFirstNumber() / input.getSecondNumber();
    default -> throw new IllegalArgumentException("不支持的运算符:" + input.getOperation());
});

方案B(低版本JDK兼容)

提前用Map存储运算符对应的运算逻辑,调用时直接取对应逻辑执行即可:
首先在类中定义静态运算映射表:

import java.util.function.IntBinaryOperator;
import java.util.Map;

public class Main {
    private static final Map<Character, IntBinaryOperator> OPERATION_MAP = Map.of(
        '+', Integer::sum,
        '-', (a, b) -> a - b,
        '*', (a, b) -> a * b,
        '/', (a, b) -> a / b
    );
    // 其余原有代码不变

输出时直接一行调用:

System.out.println(OPERATION_MAP.get(input.getOperation()).applyAsInt(input.getFirstNumber(), input.getSecondNumber()));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:45:04