广告
返回顶部
首页 > 资讯 > 精选 >JAVA中如何实现表达式计算源码
  • 604
分享到

JAVA中如何实现表达式计算源码

2023-06-03 04:06:09 604人浏览 独家记忆
摘要

这篇文章主要为大家展示了“JAVA中如何实现表达式计算源码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中如何实现表达式计算源码”这篇文章吧。支持运算符:+-*/%><][!

这篇文章主要为大家展示了“JAVA中如何实现表达式计算源码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中如何实现表达式计算源码”这篇文章吧。

支持运算符:+-*/%><][!|&=;其中]表示大于等于、[表示小于等于、!表示不等于、|表示或、&表示与、=表示是否等于

支持函数:sqrt,square, ceil,sin,cos,asin,acon.tan.atan,log,exp具体含义见calFunction代码

表达式计算组件源码:

import Java.util.Stack;
import java.util.regex.*;

public class BaseExpression {
  public static String OPTS = "+-*/%><][!|&=# public="" object="" string="" throws="" stack="" opts="new" values="new" exp="expression" int="" ncount="exp.length()," temp="this.getValue(temp);<BR" optout="" optin="Opts.pop().toString();<BR" value1="Values.pop().toString();<BR" value2="Values.pop().toString();<BR" opttemp="" opt="exp.substring(i" temp1="" nfun="" boolean="" isfun="true;<BR" for="" i="i" ntemp="" while="" if="" else="" -="" nin="" nout="this.getOptPriorityOut(temp);<BR" ret="String.valueOf(this.calValue(value2," return="" expressionexception="" throw="" exception="" new="" expression="" protected="">")) {
  return 11;
  }
  else if (opt.equals("<")) {
  return 12;
  }
  else if (opt.equals("]")) {
  return 13;
  }
  else if (opt.equals("[")) {
  return 14;
  }
  else if (opt.equals("!")) {
  return 15;
  }
  else if (opt.equals("|")) {
  return 16;
  }
  else if (opt.equals("&") )
  {
  return 23;
  }
  else if (opt.equals("=") )
  {
  return 25;
  }
  else if ( opt.equals("#"))
  {
  return 0;
  }
  else if (opt.equals("(")) {
  return 1000;
  }
  else if (opt.equals(")")) {
  return -1000;
  }
  throw new ExpressionException("运算符" + opt + "非法!");
  }

  protected int getOptPriorityIn(String opt)  throws ExpressionException{
  if (opt.equals("+")) {
  return 3;
  }
  else if (opt.equals("-")) {
  return 4;
  }
  else if (opt.equals("*")) {
  return 8;
  }
  else if (opt.equals("/")) {
  return 9;
  }
  else if (opt.equals("%")) {
  return 10;
  }
  else if (opt.equals(">")) {
  return 17;
  }
  else if (opt.equals("<")) {
  return 18;
  }
  else if (opt.equals("]")) {
  return 19;
  }
  else if (opt.equals("[")) {
  return 20;
  }
  else if (opt.equals("!")) {
  return 21;
  }
  else if (opt.equals("|")) {
  return 22;
  }
  else if( opt.equals("&") )
  {
  return 24;
  }
  else if( opt.equals("=") )
  {
  return 26;
  }
  else if (opt.equals("(")) {
  return -1000;
  }
  else if (opt.equals(")")) {
  return 1000;
  }
  else if (opt.equals("#")) {
  return 0;
  }
  throw new ExpressionException("运算符" + opt + "非法!");
  }

  protected String getOPTS()
  {
  return OPTS;
  }
  protected boolean isValue(String cValue) {
  String notValue = this.getOPTS() + "()";
  return notValue.indexOf(cValue) == -1;
  }

  protected boolean isOpt(String value) {
  return this.getOPTS().indexOf(value) >= 0;
  }

  protected double calValue(String value1, String opt, String value2)  throws ExpressionException{
  try
  {
  double dbValue1 = Double.valueOf(value1).doubleValue();
  double dbValue2 = Double.valueOf(value2).doubleValue();
  long lg = 0;
  if (opt.equals("+")) {
  return dbValue1 + dbValue2;
  }
  else if (opt.equals("-")) {
  return dbValue1 - dbValue2;
  }
  else if (opt.equals("*")) {
  return dbValue1 * dbValue2;
  }
  else if (opt.equals("/")) {
  return dbValue1 / dbValue2;
  }
  else if (opt.equals("%")) {
  lg = (long) (dbValue1 / dbValue2);
  return dbValue1 - lg * dbValue2;
  }
  else if (opt.equals(">")) {
  if (dbValue1 > dbValue2)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("<")) {
  if (dbValue1 < dbValue2)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("]")) {
  if (dbValue1 >= dbValue2)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("[")) {
  if (dbValue1 <= dbValue2)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("!")) {
  if (dbValue1 != dbValue2)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("|")) {
  if (dbValue1 > 0 || dbValue2 > 0)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("&")) {
  if (dbValue1 > 0 && dbValue2 > 0)
  return 1;
  else
  return 0;
  }
  else if (opt.equals("=")) {
  if (dbValue1 == dbValue2)
  return 1;
  else
  return 0;
  }
  }catch(Exception e)
  {
  throw new ExpressionException("值" + value1 + "或" + value2 + "在进行" +  opt + "运算时非法!");
  }
  throw new ExpressionException("运算符" + opt + "非法!");
  }

  protected String getValue(String oldValue)  throws ExpressionException{
  String reg = "^([a-zA-Z0-9_]+)(([a-zA-Z0-9_.()]+))$";
  if (this.isFunctionCal(oldValue)) {
  Pattern p = Pattern.compile(reg);
  Matcher m = p.matcher(oldValue);
  m.find();
  return calFunction(m.group(1), m.group(2));
  }
  return oldValue;
  }

  protected boolean isFunctionCal(String value) {
  String reg = "^([a-zA-Z0-9_]+)(([a-zA-Z0-9_.()]+))$";
  return value.matches(reg);
  }

  protected String calFunction(String function, String value)  throws ExpressionException{
  String lowerFun = function.toLowerCase();
  double db = 0;
  try
  {
  db = Double.valueOf(this.getValue(value)).doubleValue();
  if (lowerFun.equals("log")) {
  return String.valueOf(Math.log(db));
  }
  else if (lowerFun.equals("square")) {
  return String.valueOf(Math.pow(db, 2));
  }
  else if (lowerFun.equals("sqrt")) {
  return String.valueOf(Math.sqrt(db));
  }
  else if (lowerFun.equals("sin")) {
  return String.valueOf(Math.sin(db));
  }
  else if (lowerFun.equals("asin")) {
  return String.valueOf(Math.asin(db));
  }
  else if (lowerFun.equals("cos")) {
  return String.valueOf(Math.cos(db));
  }
  else if (lowerFun.equals("tan")) {
  return String.valueOf(Math.tan(db));
  }
  else if (lowerFun.equals("atan")) {
  return String.valueOf(Math.atan(db));
  }
  else if (lowerFun.equals("ceil")) {
  return String.valueOf(Math.ceil(db));
  }
  else if (lowerFun.equals("exp")) {
  return String.valueOf(Math.exp(db));
  }
  }catch(Exception e)
  {
  throw new ExpressionException("函数" + function + "值" + value + "非法!");
  }

  throw new ExpressionException("函数" + function + "不支持!");
  }
   public static void main(String[] args)
   {
   BaseExpression be = new BaseExpression();
   String exp = "sin(ceil(sqrt(100)))*29+20+30*3+0|0|1+1&1*5+2=2";
   try
   {
   System.out.println(be.calculate(exp));
   }
   catch(ExpressionException eE)
   {
   System.out.println(eE.getMessage());
   }
 }
}

表达式异常类代码:

public class ExpressionException extends Exception{
  public ExpressionException(String msg)
  {
  super(msg);
  }
}

以上是“JAVA中如何实现表达式计算源码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: JAVA中如何实现表达式计算源码

本文链接: https://www.lsjlt.com/news/232828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA中如何实现表达式计算源码
    这篇文章主要为大家展示了“JAVA中如何实现表达式计算源码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中如何实现表达式计算源码”这篇文章吧。支持运算符:+-*/%><][!...
    99+
    2023-06-03
  • Java如何计算数学表达式
    这篇文章主要为大家展示了“Java如何计算数学表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java如何计算数学表达式”这篇文章吧。Java字符串转换成算术表达式计算并输出结果,通过这个工...
    99+
    2023-05-30
    java
  • Java实现简易计算器(逆波兰表达式)
    本文实例为大家分享了Java实现简易计算器的具体代码,供大家参考,具体内容如下 程序的运行环境为Windows10 ,编译环境为IDEA。 计算器有以下功能和要求:能够计算复杂表达式...
    99+
    2022-11-13
  • TiKV 源码解析系列文章(十五)表达式计算框架
    作者:骆迪安 上一篇 《TiKV 源码解析系列文章(十四)Coprocessor 概览》讲到了 TiDB 为了最大化利用分布式计算能力,会尽量将 Selection 算子、聚合算子等算子下推到 TiKV 节点上。本文将继续介绍 C...
    99+
    2021-12-19
    TiKV 源码解析系列文章(十五)表达式计算框架
  • java实现计算器模板及源码
    计算器实现了大部分基础功能:基本运算,菜单栏选项,并且拓展了普通型和科学兴选项等等,读者可以在此基础上进行修改和拓展。其他具体实现方法可以看源码,里面有详细的概述,代码框架清晰。 运...
    99+
    2022-11-13
  • C++实现LeetCode(150.计算逆波兰表达式)
    [LeetCode] 150.Evaluate Reverse Polish Notation 计算逆波兰表达式 Evaluate the value of an arithmeti...
    99+
    2022-11-12
  • Python 正则表达式实现计算器功能
    需求: 用户输入运算表达式,终端显示计算结果 代码: # !/usr/bin/env/ python3 # -*- coding: utf-8 -*- """用户输入计算表达式,显示计算结果""" ...
    99+
    2022-06-04
    计算器 功能 正则表达式
  • java如何实现OA信用盘系统制作字符串表达式计算
    这篇文章将为大家详细讲解有关java如何实现OA信用盘系统制作字符串表达式计算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方案一:eval 函数OA信用盘系统制作q<115.28.8.00.9.9...
    99+
    2023-06-02
  • 后缀表达式的java如何实现
    这篇“后缀表达式的java如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“后缀表达式的java如何实现”文章吧。中缀表...
    99+
    2023-07-02
  • 详解Java中缀表达式的实现
    目录1.概念2.算法流程3 代码实现1.概念 什么是中缀表达式,什么是后缀表达式 从小学开始学习的四则运算,例如:3+(5*(2+3)+7) 类似这种表达式就是中缀表达式。中缀表达式...
    99+
    2022-11-13
  • C语言如何实现数学表达式运算
    C语言如何实现数学表达式运算,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。大家分享了C语言实现数学表达式运算的具体代码,具体内容如下开发思路: (假设有表达式 2 * 3 ...
    99+
    2023-06-21
  • C++如何实现中缀表达式转化为后缀表达式
    这篇文章将为大家详细讲解有关C++如何实现中缀表达式转化为后缀表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象...
    99+
    2023-06-29
  • 如何在Java中实现分布式实时计算?
    随着数据量的增长,传统的单机实时计算已经无法满足业务需求。分布式实时计算能够将计算任务分散到多台机器上,从而提高计算效率和可靠性。本文将介绍如何使用Java实现分布式实时计算。 一、什么是分布式实时计算? 分布式实时计算是指将一个大任务分...
    99+
    2023-06-07
    关键字 分布式 实时
  • 逆波兰表达式如何在Java项目中实现
    本篇文章给大家分享的是有关逆波兰表达式如何在Java项目中实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。逆波兰表达式定义:传统的四则运算被称作是中缀表达式,即运算符实在两个...
    99+
    2023-05-31
    java 逆波兰表达式 ava
  • Golang栈结构和后缀表达式实现计算器示例
    目录引言问题中缀、后缀表达式的计算人利用中缀表达式计算值计算机利用后缀表达式计算值计算后缀表达式的代码实现中缀表达式转后缀表达式转换过程转换的代码实现总结引言 只进行基本的四则运算,...
    99+
    2022-11-13
  • Java如何实现分布式实时计算?
    随着互联网时代的到来,数据量呈现爆炸性增长,如何高效地处理这些数据成为了每个企业必须面对的问题。分布式计算是一种解决大规模数据处理的有效方法。本文将介绍Java如何实现分布式实时计算,并且通过演示代码,让读者更好地理解。 一、分布式实时计...
    99+
    2023-10-17
    numy 分布式 实时
  • Java中Cron表达式的生成解析和计算的工具类
    Java中Cron表达式的生成解析和计算的工具类 1. 生成表达式2. 解析表达式3. 计算表达式执行日期4. 测试5. 完整代码 本文介绍通过java生成cron表达式,解析表达式,...
    99+
    2023-10-03
    java python 算法
  • 如果 NULLIF() 中的参数不相等,MySQL 如何计算表达式?
    我们知道 MySQL NULLIF() 控制流函数将返回第一个参数,这两个参数不相同。返回第一个参数,因为如果两个参数不相同,MySQL 会计算第一个参数两次。示例mysql> Select NULLIF('Tutorials...
    99+
    2023-10-22
  • Java正则表达式中如何实现分组和替换
    小编给大家分享一下Java正则表达式中如何实现分组和替换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!正则表达式的子表达式(分组)不是很好懂,但却是很强大的文本处理工具。1 正则表达式热身匹配电话号码// 电话号...
    99+
    2023-06-21
  • 用 Go 实现一个完整的数学表达式计算引擎
    导读这篇文章将从头开始,使用 Go 语言来实现一个完整的数学表达式计算引擎。本文采用的是抽象语法树(Abstract Syntax Tree,AST)实现方式。虽然本文的实现代码为 Go,但不用纠结于此,语言只是实现方式的一种选择,作为开发...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作