微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

例一:

[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. noparen(mc.group(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. }

原文地址:https://www.jb51.cc/regex/361810.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐