加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

算法基础——2.5正则表达式进阶

发布时间:2020-12-14 01:47:36 所属栏目:百科 来源:网络整理
导读:例一: [java] view plain copy /* 计算表达式的值(假设只有加法、减法、乘法) 23+15-16*(25+(6-3)+9*2) */ import java.util.regex.*; public class T1 { //计算没有括号的表达式 static StringcalcuNoParen(Strings) { if (s.length() 1 ) return s; //

例一:

[java] view plain copy
  1. /*
  2. 计算表达式的值(假设只有加法、减法、乘法)
  3. 23+15-16*(25+(6-3)+9*2)
  4. */
  5. importjava.util.regex.*;
  6. publicclassT1
  7. {
  8. //计算没有括号的表达式
  9. staticStringcalcuNoParen(Strings)
  10. {
  11. if(s.length()<1)returns;
  12. //先把所有乘法消除
  13. Patternpat=Pattern.compile("([0-9]+)*([0-9]+)");
  14. while(true){
  15. Matchermc=pat.matcher(s);
  16. if(mc.find()==false)break;//已经没有乘法了
  17. intres=Integer.parseInt(mc.group(1))*Integer.parseInt(mc.group(2));
  18. s=s.replace(mc.group(),res+"");//注意这里不能用replaceAll
  19. }
  20. //再从左到右消除所有加法或减法
  21. pat=Pattern.compile("([0-9]+)([+-])([0-9]+)");
  22. //已经没有运算符了
  23. intres=0;
  24. if(mc.group(2).equals("+"))
  25. res=Integer.parseInt(mc.group(1))+Integer.parseInt(mc.group(3));
  26. else
  27. 1))-Integer.parseInt(mc.group( s=s.replace(mc.group(),0); background-color:inherit">//注意这里不能用replaceAll
  28. }
  29. returns;
  30. //计算可能含有括号的表达式
  31. staticStringcalcu(Strings)
  32. s=s.replaceAll("+","");//消除空格
  33. Patternpat=Pattern.compile("(([^()]*))");
  34. break;
  35. //把括号内先计算,然后消除括号
  36. 1)));
  37. returncalcuNoParen(s);
  38. staticvoidmain(String[]args)
  39. /*
  40. Strings="23+15-16*(25+(6-3*2*1)+9*2)";
  41. //任务:找到最内层括号中的内容,计算后替换掉
  42. */
  43. System.out.println(calcu("5+3*2*(2+2-3)-1"));
  44. }
例二:

    /*第02讲-正则表达式进阶_展开串
  1. 实际开发中,常常会出现用到一批文件,而这些文件的文件名有某种规律,我们在表述的时候,往往习惯简写,但这样程序又不好识别。
  2. 比如:
  3. c:/abc/xyz/k[11..19].dat
  4. 实际表示的就是:
  5. c:/abc/xyz/k11.dat
  6. c:/abc/xyz/k12.dat
  7. c:/abc/xyz/k13.dat
  8. c:/abc/xyz/k14.dat
  9. c:/abc/xyz/k15.dat
  10. c:/abc/xyz/k16.dat
  11. c:/abc/xyz/k17.dat
  12. c:/abc/xyz/k18.dat
  13. c:/abc/xyz/k19.dat
  14. 本题目要求是:给定一个含有简写的串,要求展开为所有文件名。
  15. 简写的格式为:[整数..整数]*/
  16. classC5{
  17. voidmain(String[]args){
  18. Strings="c:/abc/xyz/k[11..19].dat";
  19. intbegin=0,end= Patternpat=Pattern.compile("[([0-9]+)..([0-9]+)]");
  20. Matchermc=pat.matcher(s);
  21. if(mc.find()){
  22. begin=Integer.parseInt(mc.group(1));//第一个文件号
  23. end=Integer.parseInt(mc.group(2));//最后一个文件号
  24. for(inti=begin;i<=end;++i){
  25. System.out.println(s.replaceAll("[([0-9]+)..([0-9]+)]",i+""));
  26. }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读