返回顶部
首页 > 资讯 > 精选 >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://lsjlt.com/news/232828.html(转载时请注明来源链接)

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

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

  • 微信公众号

  • 商务合作