把公式中的除数和被除数分解出来,

本人有一个字符串,它是一个公式,是属于四则运算那种,我要把它里面的除数和被除数全部分解出来,让后通过decode函数来判断被除数是不是0,如果是0就把整个表达式为0,想了N久,发现里面的逻辑关系太复杂了,希望有那位解决过类似问题的给咱一个提示

如果你的表达式里面的除数仅有常量,可以分析表达式.
如果表达式里面仅有变量,直接用decode函数就可以了.
如果是混合常量和变量,两步都要做. 先分析表达式,把除数中出现常量0的情况过滤掉,直接给它替换成0. 再用decode函数包装起来放在sql里面.

我想问你,这个表达式怎么得到的? 你能保证表达式里面变量的正确性?

参看 前缀表达式 http://baike.baidu.com/view/3095092.htm

按照你的意思,在最外边加try catch就可以了。如果抛出java.lang.ArithmeticException异常,则就可以把公式置为0了。

如果不满足你的需求,想解析表达式,参考dwangel 的答案了。

四则运算混合表达式通过中缀转逆波兰式,你可以使用堆栈,可以实时监控运算情况,这样你的问题就OK了

楼主是类似这样的表达式吗? "x/y" ?

楼主试试这段代码: [code="java"] Pattern pa = Pattern.compile("([a-z]+)/([a-z]+)");
String str = "a+x/y-b/c";
Matcher m = pa.matcher(str);
String ele = "";
String group = "";
while (m.find()) {
group = m.group();
ele = group.substring(group.indexOf("/") + 1);
if (ele == null || "".equals(ele) || Integer.valueOf(ele) == 0) {
str.replaceAll(str, "0");
}
}[/code]

java的逆波兰式算法
http://dq1618.iteye.com/blog/83925
四则运算求值(中缀转逆波兰式)
http://mingjian01.iteye.com/blog/748154

sql查询不会抛异常啊,如果除数为0,必然会返回一个特殊的值,比如(null), 比如NaN之类的, 具体值请参考你的sql服务器的帮助文档.

我这么讲就明了啦,不用去decode被除数了,直接decode结果就好了,或者用isnull之类的函数来判断.

decode被除数有个缺点,在表达式嵌套的情况下,比如除法的被除数里面嵌套了除法,你得从嵌套最内层的被除数开始判断,一层层判断. 这么做麻烦死了,生成的decode也会复杂的让人头疼.

等我查一下oracle pl/sql语法

你就 decode(你的表达式i, null, 0, 你的表达式) 就可以了.

isnull忘记吧, 哪个是sqlserver的tsql的语法

上面你的表达式后面多了一个i, 是手误, 敲错了

楼主给分嘛~

oralce会抛异常的……