例一:
-
-
- 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+"");
- }
- //再从左到右消除所有加法或减法
- 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"));
- }
例二:
/*第02讲-正则表达式进阶_展开串
- 实际开发中,常常会出现用到一批文件,而这些文件的文件名有某种规律,我们在表述的时候,往往习惯简写,但这样程序又不好识别。
- 比如:
- c:/abc/xyz/k[11..19].dat
- 实际表示的就是:
- c:/abc/xyz/k11.dat
- c:/abc/xyz/k12.dat
- c:/abc/xyz/k13.dat
- c:/abc/xyz/k14.dat
- c:/abc/xyz/k15.dat
- c:/abc/xyz/k16.dat
- c:/abc/xyz/k17.dat
- c:/abc/xyz/k18.dat
- c:/abc/xyz/k19.dat
- 本题目要求是:给定一个含有简写的串,要求展开为所有文件名。
- 简写的格式为:[整数..整数]*/
- classC5{
- voidmain(String[]args){
- Strings="c:/abc/xyz/k[11..19].dat";
- intbegin=0,end= Patternpat=Pattern.compile("[([0-9]+)..([0-9]+)]");
- Matchermc=pat.matcher(s);
- if(mc.find()){
- begin=Integer.parseInt(mc.group(1));
- end=Integer.parseInt(mc.group(2));
- for(inti=begin;i<=end;++i){
- System.out.println(s.replaceAll("[([0-9]+)..([0-9]+)]",i+""));
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|