例一:
- /*
- 计算表达式的值(假设只有加法、减法、乘法)
- 23+15-16*(25+(6-3)+9*2)
- */
- importjava.util.regex.*;
- publicclassT1
- {
- //计算没有括号的表达式
- staticStringcalcuNoParen(Strings)
- {
- if(s.length()<1)returns;
- //先把所有乘法消除
- Patternpat=Pattern.compile("([0-9]+)\\*([0-9]+)");
- while(true){
- Matchermc=pat.matcher(s);
- if(mc.find()==false)break;//已经没有乘法了
- intres=Integer.parseInt(mc.group(1))*Integer.parseInt(mc.group(2));
- s=s.replace(mc.group(),res+"");//注意这里不能用replaceAll
- }
- //再从左到右消除所有加法或减法
- pat=Pattern.compile("([0-9]+)([\\+\\-])([0-9]+)");
- //已经没有运算符了
- intres=0;
- if(mc.group(2).equals("+"))
- res=Integer.parseInt(mc.group(1))+Integer.parseInt(mc.group(3));
- else
- 1))-Integer.parseInt(mc.group( s=s.replace(mc.group(),0); background-color:inherit">//注意这里不能用replaceAll
- }
- returns;
- //计算可能含有括号的表达式
- staticStringcalcu(Strings)
- s=s.replaceAll("+","");//消除空格
- Patternpat=Pattern.compile("\\(([^\\(\\)]*)\\)");
- break;
- //把括号内先计算,然后消除括号
- 1)));
- returncalcuNoParen(s);
- staticvoidmain(String[]args)
- /*
- Strings="23+15-16*(25+(6-3*2*1)+9*2)";
- //任务:找到最内层括号中的内容,计算后替换掉
- */
- System.out.println(calcu("5+3*2*(2+2-3)-1"));
- }