如何用Java解析并求解含calculate前缀的字符串数学题?
Java实现"calculate"开头的数学题计算
核心处理步骤
- 提取有效表达式:先截掉开头的
calculate(注意带空格),从输入字符串中分离出纯计算部分,比如将calculate 5 + 2转为5 + 2。 - 拆分表达式元素:按空格分割提取后的表达式,得到操作数和运算符,例如拆分后得到数组
["5", "+", "2"]。 - 类型转换与计算:把字符串类型的操作数转为数值类型,根据运算符执行对应计算逻辑。
完整代码示例
import java.util.Scanner; public class CalculateHandler { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入计算指令(格式:calculate 数字 运算符 数字):"); String input = scanner.nextLine(); // 已实现的开头判断逻辑 if (input.startsWith("calculate")) { // 提取计算表达式 String expr = input.substring("calculate ".length()).trim(); // 按空格拆分元素 String[] parts = expr.split("\\s+"); // 校验输入格式 if (parts.length != 3) { System.out.println("格式错误,请按 calculate 数字 运算符 数字 输入"); return; } try { // 转换操作数为整数 int num1 = Integer.parseInt(parts[0]); String operator = parts[1]; int num2 = Integer.parseInt(parts[2]); int result = 0; // 根据运算符执行计算 switch (operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": if (num2 == 0) { System.out.println("除数不能为0"); return; } result = num1 / num2; break; default: System.out.println("仅支持 + - * / 四种运算符"); return; } System.out.println("计算结果:" + result); } catch (NumberFormatException e) { System.out.println("输入的不是有效数字"); } } else { System.out.println("指令无效,请以calculate开头"); } } }
扩展说明
- 若需支持浮点数计算,只需将代码中的
int替换为double,Integer.parseInt替换为Double.parseDouble。 - 要处理更复杂的表达式(如多运算符、括号),可以借助
ScriptEngine简化逻辑,无需手动处理运算符优先级:
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; // 替换上述代码中的计算逻辑部分 ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); try { Object result = engine.eval(expr); System.out.println("计算结果:" + result); } catch (ScriptException e) { System.out.println("表达式格式错误"); }
注意:这种方式适合处理可信输入,若用户输入不可信内容,存在注入风险,需谨慎使用。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

