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

前端之家收集整理的这篇文章主要介绍了算法基础——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. 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. }
例二:

@H_301_377@/*第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+""));
  • }
  • 原文链接:https://www.f2er.com/regex/361810.html

    猜你在找的正则表达式相关文章