2007-02-26
利用正则式计算表达式的值
关键字: JAVA 正则式 表达式 求值RT,最近又看了下JAVA的正则式,解决了之前对JAVA中正则式的一些疑问.
写了个利用正则式计算表达式值的代码.算法很简单,就是"先乘除,后加减,有括号先算括号里的"
ps:当然,计算表达式值最常用也最有效的方法是利用逆波兰式,这儿只是拿正则式来练练手.
程序没有经过严谨的测试,可能有bug.
java 代码
- import java.util.regex.*;
- import java.util.*;
- /**
- *利用正则式计算表达式的值
- *@author: Eastsun
- *@version: 0.5 07.2.26
- */
- public class Calculate{
- /*
- 正则式这块贴上来会影响代码结构,略之.
- 详见打包后的代码
- */
- private static double operator(Matcher m,int index){
- index =index*2;
- double a,b;
- if(m.group(1)!=null){
- a =Double.parseDouble(m.group(1));
- b =Double.parseDouble(m.group(2));
- }
- else{
- index ++;
- a =Double.parseDouble(m.group(3));
- b =Double.parseDouble(m.group(4));
- }
- double r =0.0;
- switch(index){
- case 0:
- r =a+b;
- break;
- case 1:
- r =a-b;
- break;
- case 2:
- r =a*b;
- break;
- case 3:
- r =a/b;
- break;
- }
- return r;
- }
- public static double eval(String str){
- StringBuilder sb =new StringBuilder(str.replaceAll("\\s+",""));
- while(true){
- Matcher m =BRA.matcher(sb);
- if(m.find()){
- sb.replace(m.start(),m.end(),m.group(1));
- }
- else{
- int index =1;
- m =MUL_OR_DIV.matcher(sb);
- if(!m.find()){
- index --;
- m =ADD_OR_SUB.matcher(sb);
- if(!m.find()) break;
- }
- sb.replace(m.start(),m.end(),""+operator(m,index));
- }
- }
- return Double.parseDouble(sb.toString());
- }
- public static void main(String[] args){
- Scanner scan =new Scanner(System.in);
- while(true){
- System.out.print("\nEnter a expression :");
- String str =scan.next();
- if(str.equals("exit")) break;
- System.out.print(str +" = "+eval(str));
- }
- }
- }
发表评论
- 浏览: 75640 次
- 性别:

- 来自: 天津

- 详细资料
搜索本博客
我的相册
6.5beta.PNG
共 61 张
共 61 张
最新评论
-
澄清:Java中只有按值传递 ...
Eastsun 写道归根究底,其实就是一个对“按引用传递”这个概念理解的问题。 ...
-- by suerzxt -
一个将BIG5编码转换为GB23 ...
谢谢了。呵呵
-- by zhangts8888 -
Java与Scala中的闭包
我说说我对闭包的理解,看看片面不,我理解的闭包是一个处理的输入和输出类型项相同, ...
-- by bloodrate -
Java与Scala中的闭包
刚刚试验了下java7: class A{ static { => in ...
-- by hity -
不要随便和老外说中文!!
。。。。。。。太强大了。。。。居然被gigix碰到真人真事了。。。
-- by sg552






评论排行榜