这是最近在项目中的一个需求,已知a=3,求字符串"a<=2"的值,也就是应该返回false。这个问题可大可小,就我们的应用场景也就是用来让用户自定义变量区间,比如类似下面这样的规则:
a<=2 返回积分系数1.0
2<=5 返回积分系数1.1
a>5 返回积分系数1.2
如果用switch写死在代码中,以后要修改规则实在是很麻烦的事情,用户也希望能自己维护这样些区间值。于是我想就让用户自己输入这样的表达式和变量的值保存在数据库中,然后计算的时候由系统来解析表达式并求值。问题就归结到求值字符串型逻辑表达式。这个问题恰好是规则引擎的应用领域,可我们的系统已经上线蛮久了,从维护角度也不希望再引入新的开源工具,如果是算术表达式(比如2+3之类)可以直接扔进数据库执行即可,逻辑表达式倒是可以通过调用脚本语言来eval,但是同样是考虑后期维护问题,也不想引入beanshell、groovy的脚本语言。所以,我就自己写了个parser用于求值。
基本原理就是维护两个栈:操作数栈和操作符号栈,解析和求值的过程就是入栈和出栈操作。我不知道怎么编辑代码了,有兴趣看看这个链接吧。http://www.blogjava.net/killme2008/archive/2007/08/06/134668.html
分享到:
- 2007-08-06 12:41
- 浏览 3796
- 评论(1)
- 论坛回复 / 浏览 (1 / 3673)
- 查看更多
相关推荐
`eval()`函数在这里用作一个简单的工具,用于计算`lambda`表达式的值,但实际应用中可能需要更复杂的逻辑来处理各种类型的表达式。 将字符串转换为`lambda`表达式的一个实际应用是动态构建过滤条件。例如,在GUI...
StringToExpression 文件可能包含的就是这样一个实现,通过读取字符串,转换为后缀表达式,再进行求值,从而完成字符串到数值的转化。 理解这一过程对于编写解释器、计算器应用或者处理含有计算逻辑的文本至关重要...
### Java正则表达式替换字符串详解 #### 一、引言 在Java编程语言中,正则表达式是一种强大的文本处理工具,它可以帮助开发者轻松地完成字符串搜索、替换等任务。本文将详细介绍如何使用Java正则表达式进行字符串...
在编程领域,字符串表达式解析求值算法是一种关键的技术,尤其在计算器应用、脚本语言或者自定义计算逻辑实现中非常常见。这个算法的核心任务是将由字符组成的字符串转换为可执行的数学表达式,同时处理变量和各种...
"Java表达式求值2.0"可能是指一个优化过的版本,用于更高效地处理Java中的数学或逻辑表达式。这个版本可能是针对早期版本的错误进行了修复,或者增加了新的功能。 在Java中,表达式求值通常涉及以下知识点: 1. **...
- **${param}**:返回请求参数中的单个字符串值。 - **${paramValues}**:返回请求参数的一组值。 此外,EL表达式还支持以下几种类型的隐式对象: - **PageScope、RequestScope、SessionScope、ApplicationScope**...
在计算机科学中,表达式求值是编程语言理论的一个核心概念,主要涉及如何解析和计算数学或逻辑表达式。这个过程通常分为两个阶段:语法分析(解析)和语义分析(求值)。以下是对表达式求值算法、代码实现、报告编写...
### Java字符串类型转换详解 在Java编程语言中,字符串(String)是一种常用的数据类型,用于处理文本数据。Java提供了丰富的API来支持不同类型的字符串转换,包括但不限于从字符数组、基本数据类型、对象到字符串...
实现一个算术表达式求值器可以让我们掌握到字符串处理、数据结构(如栈)以及算法设计等多个方面的知识,这些都是Java程序员日常工作中不可或缺的技能。通过这个项目,你不仅能学会如何处理动态的算术表达式,还能...
根据给定的信息,我们可以分析并总结出以下与“求字符串中的第一个数字”相关的知识点: ### 1. 字符串操作基础 #### 1.1 字符串简介 在 Java 中,`String` 类用于表示不可变的字符序列,即字符串。字符串在 Java ...
JEP(Java Expression Parser)是一个强大的Java类库,专门用于解析和求值字符串形式的数学表达式。这个库使得在Java程序中处理复杂的数学运算变得简单直观,它能够有效地将字符串转换为可执行的数学计算。例如,你...
在Java编程中,比较两个字符串的匹配字数是一项常见的任务,尤其是在文本处理或模式匹配的场景下。以下是一个简单的实现,通过`RangeDifferencer4Bak`类来完成这个功能。这个类有两个主要方法:`getTempModel`和`...
在Java编程语言中,字符串处理是一项常见的任务,它涉及到对文本数据的各种操作,如编码转换、截取、加密和解密以及数值与字符串之间的转换。本组件提供了丰富的功能,简化了这些操作。以下是对该组件及其功能的详细...
综上所述,"统计字符串中子字符串出现的次数,并返回"这一功能涉及了C#中的字符串基础知识、字符串查找方法、循环与递归逻辑、正则表达式以及算法优化等多个方面。通过深入理解和实践这些知识点,可以更好地应对各种...
从给定的文件标题“字符串转换为计算公式的若干种方法”及描述“个人收集的几种将字符串表达式转换为计算公式的方法”中,我们可以看出文章主要探讨的是如何将文本形式的数学表达式(字符串)转化为可以进行计算的...
根据提供的标题、描述、标签及部分内容,我们可以总结出以下关于Java字符串处理的相关知识点: ### Java字符串处理技术:中文与英文的兼容性 在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际...
通过深入学习这些Java字符串搜索的知识点,并结合提供的源代码实例,开发者可以提升其在字符串处理方面的技能,这对于任何Java开发工作都是必不可少的。记得实践是检验理解的最佳方式,尝试修改和扩展这些例子,以...
在IT领域,尤其是在编程与数据处理中,统计字符串中特定字符的出现次数是一个常见的需求。本文将深入探讨几种实现这一功能的方法,并通过实际代码示例和性能对比分析,帮助读者理解每种方法的优劣,以便在实际开发中...
在Java编程中,判断字符串非空是一个常见的任务,特别是在处理用户输入或数据验证时。从提供的代码示例中,我们可以看到几种不同的方法来检查字符串是否为空。这些方法包括使用基本的逻辑运算符、Apache Commons ...