`
Eastsun
  • 浏览: 308868 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

利用正则式计算表达式的值

阅读更多

RT,最近又看了下JAVA的正则式,解决了之前对JAVA中正则式的一些疑问.
写了个利用正则式计算表达式值的代码.算法很简单,就是"先乘除,后加减,有括号先算括号里的"
ps:当然,计算表达式值最常用也最有效的方法是利用逆波兰式,这儿只是拿正则式来练练手.
程序没有经过严谨的测试,可能有bug.

java 代码
  1. import  java.util.regex.*;   
  2. import  java.util.*;   
  3. /**  
  4. *利用正则式计算表达式的值  
  5. *@author: Eastsun  
  6. *@version: 0.5 07.2.26  
  7. */   
  8. public   class  Calculate{   
  9.     /*
  10.     正则式这块贴上来会影响代码结构,略之.
  11.     详见打包后的代码
  12.     */        
  13.      private   static   double  operator(Matcher m, int  index){   
  14.         index =index* 2 ;   
  15.          double  a,b;   
  16.          if (m.group( 1 )!= null ){   
  17.             a =Double.parseDouble(m.group( 1 ));   
  18.             b =Double.parseDouble(m.group( 2 ));   
  19.         }   
  20.          else {   
  21.             index ++;   
  22.             a =Double.parseDouble(m.group( 3 ));   
  23.             b =Double.parseDouble(m.group( 4 ));   
  24.         }   
  25.          double  r = 0.0 ;   
  26.          switch (index){   
  27.              case   0 :   
  28.                 r =a+b;   
  29.                  break ;   
  30.              case   1 :   
  31.                 r =a-b;   
  32.                  break ;   
  33.              case   2 :   
  34.                 r =a*b;   
  35.                  break ;   
  36.              case   3 :   
  37.                 r =a/b;   
  38.                  break ;   
  39.         }   
  40.          return  r;   
  41.     }   
  42.      public   static   double  eval(String str){   
  43.         StringBuilder sb = new  StringBuilder(str.replaceAll( "\\s+" , "" ));   
  44.          while ( true ){   
  45.             Matcher m =BRA.matcher(sb);   
  46.              if (m.find()){   
  47.                 sb.replace(m.start(),m.end(),m.group( 1 ));   
  48.             }   
  49.              else {   
  50.                  int  index = 1 ;   
  51.                 m =MUL_OR_DIV.matcher(sb);   
  52.                  if (!m.find()){   
  53.                     index --;   
  54.                     m =ADD_OR_SUB.matcher(sb);   
  55.                      if (!m.find())  break ;   
  56.                 }   
  57.                 sb.replace(m.start(),m.end(), "" +operator(m,index));   
  58.             }   
  59.         }   
  60.          return  Double.parseDouble(sb.toString());   
  61.     }                               
  62.      public   static   void  main(String[] args){   
  63.         Scanner scan = new  Scanner(System.in);   
  64.          while ( true ){   
  65.             System.out.print( "\nEnter a expression :" );   
  66.             String str =scan.next();   
  67.              if (str.equals( "exit" ))  break ;   
  68.             System.out.print(str + " = " +eval(str));   
  69.         }   
  70.     }   
  71. }  

 

  • Calculate.rar (1.1 KB)
  • 描述: 修正后的源代码
  • 下载次数: 147
分享到:
评论
2 楼 ct455332 2010-03-27  
因为我是 java菜鸟。额所以不行的啊
1 楼 ct455332 2010-03-27  
我一直不太懂正则表达式。下午自己弄了个仿造你的这个结果快150行。。。囧

相关推荐

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...

    正则表达式

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它...

    正则表达式研究资料

    例如,你可以使用正则表达式来验证输入框(input)的值是否符合特定格式。 CS可能指的是C#,在C#中,正则表达式被封装在`System.Text.RegularExpressions`命名空间内的`Regex`类中。C#的正则表达式功能丰富且与.NET...

    正则表达式解二元方程式代码

    标题“正则表达式解二元方程式代码”和描述“看到了这文我震惊了,正则能解二元方程式~~,需要的朋友可以看下”揭示了文章的核心内容——利用正则表达式解决二元一次方程的问题。内容中不仅提及了使用正则表达式的...

    正则式匹配1

    【正则式匹配1】问题主要涉及动态规划和正则表达式匹配的算法设计。题目要求实现一个函数,检查一个字符串`s`是否能被包含特殊字符`'.'`和`'*'`的正则表达式`p`所匹配。`'.'`表示任意一个字符,而`'*'`表示它前面的...

    grepWinPortable 非常强大的文件字符查找替换工具 支持正则

    在grepWinPortable中,你可以利用正则表达式的强大功能来定位和替换那些难以用普通文本搜索找到的复杂模式。例如,你可以查找所有以数字开头的电子邮件地址,或者找出所有包含特定日期格式的行。 grepWinPortable的...

    帆软用法总结(各模块语法规则,系统集成)

    - `if(条件式子,值1,值2)`:支持嵌套。 - `switch`语句:具体请查看官方文档。 - 对于判断逻辑,单等号和双等号均可使用。 3. **布尔值与字符串处理:** - `bool`类型只有`true`或`false`。 - 字符串处理...

    算术表达式的词法分析

    括号用于改变运算顺序,确保表达式的正确求值。 词法分析的过程通常通过正则表达式完成,正则表达式是一种强大的模式匹配工具。例如,我们可以定义一个正则表达式来匹配数字,另一个来匹配运算符,以此类推。一旦...

    数学运算式简单校验

    它可能包括一个解析类,用于检查运算式的合法性,一个表达式解析器,用于提取变量和方法,以及可能的一个求值引擎,用于计算解析后的表达式。阅读并理解这个文件的源代码可以帮助你更好地掌握这一过程。 总结来说,...

    js实现的温度计

    `calcPointerPosition`函数根据输入的温度值计算指针应该在图片上的位置,并用百分比表示。 4. **温度范围与校准**: `minTemp`和`maxTemp`代表温度计的最小和最大刻度值,确保指针不会超出图片范围。这需要在...

    matlab开发-交互性葡萄糖加压素

    在MATLAB环境中,开发交互性葡萄糖加压素涉及到对数据处理、图形用户界面(GUI)设计以及正则表达式的运用。MATLAB是一款强大的数学计算软件,被广泛应用于科学与工业领域,尤其在数据分析和算法开发方面表现出色。...

    字符串转换成计算数值公式(c#)

    在解析完成后,我们可以通过后缀表达式(也称为逆波兰表示法)或栈来计算表达式的值。后缀表达式将操作符放置在其操作数之后,使得计算过程无需使用优先级表,只需按顺序处理即可。在C#中,可以使用两个栈,一个存储...

    regular expression

    利用Haskell语言的函数式编程特性,他们创建了一个正则表达式到硬件编译器的框架,这个框架能够支持高效的程序员生产力,同时生成的硬件电路性能可以达到甚至超越手工优化的VHDL工具。 文章的摘要部分提到了FPGA...

    c#写带括号的四则运算计算器带源码,

    2. **正则表达式**:在处理复杂的数学表达式时,可以利用C#中的正则表达式库来匹配和提取操作符、数字和括号。例如,正则表达式可以用来找出所有的数字和操作符,帮助我们构建计算树。 3. **中缀表达式与后缀表达式...

    python基础

    - 正则表达式在文本处理中的应用案例。 #### Python第59课:正则表达式(5) - **知识点**: - 正则表达式的特殊应用场景。 - 如何处理多行文本。 - 正则表达式的边界匹配和零宽断言。 #### Python第60课:...

    python基础教程

    - 示例代码展示如何使用正则表达式的高级特性进行匹配。 #### Python第58课:正则表达式(4) - **知识点**: - 正则表达式的贪婪匹配与非贪婪匹配。 - 匹配模式的优化。 - 示例代码展示如何使用不同的匹配模式...

    利用格氏法求解高桩码头基桩内力方法的探讨

    在算例部分,作者给出了具体的计算步骤,包括输入已知数据、调用子程序计算临界深度、计算桩的受压长度和受挠长度、使用正则方程式计算桩台位移和转角等。这些步骤对应于数学模型中的各个参数和变量,通过计算机程序...

Global site tag (gtag.js) - Google Analytics