【零碎JAVA】正则表达式

前端之家收集整理的这篇文章主要介绍了【零碎JAVA】正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对于复杂的字符串处理,如果我们单过使用String类对她进行我们需要的处理会变得十分困难,编写代码会变的十分繁杂,此时,我们可以使用正则表达式来处理这样的问题。

java中的java.util.regex包中对正则表达式进行了描述。这个包中主要包含两个类,一个Pattern,一个Mathcer。其中Pattern可以理解为一个分装好的正则表达式实例对象,Mathcer可以理解为指定字符串与正则表达式匹配后产生的一个匹配器,他内部提供了很多对匹配后的结果的操作。使用起来比较便捷。

使用Pattern与Matcher的操作步骤如下:

1.创建Pattern对象,该对象是由Pattern编译指定的正则表达式后产生的。

2.将获得的Pattern对象与我们需要比较的字符串进行匹配,产生一个Mathcer对象。

3.根据我们的需求,调用Matcher的方法,达到我们的目标。

比如,我们需要比较将例如“aabbbccddeeeeeffg”字符串转换成”abcdefg”,我们可以这么做

  1. String str = "aabbbccddeeeeeffg";
  2. Pattern pattern = Pattern.compile("([a-z])\\1+");
  3. Matcher matcher = pattern.matcher(str);
  4. str = matcher.replaceAll("$1");
  5. sop(str);

当然,我们也可以直接使用String提供的replaceAll方法来实现这个功能

  1. String str = "aabbbccddeeeeeffg";
  2. str = str.replaceAll("([a-z])\\1+","$1");
  3. sop(str);

如果我们查看String的repalceAll源码,我们会发现,他底层就是使用了Pattern与Matcher。

上述代码的正则表达式用到了组合的概念,用()括起来的就是一个组,后面我们可以通过组号来调用前面的组内容,避免重复写代码,组号是根据左括号出现的位置决定的,第一个左括号到与之对应右括号为第一组,第二个左括号到与之对应的右括号为第二组,以此类推...我们可以使用\+组号的形式来调用,需要注意的是\是特殊字符,需要使用\来转义。

处理字符串主要有以下几种操作:

1.匹配:用于判断是否与我们指定的形式符合。主要方法 matches()

2.替换:将一有字符串变换成另一种字符串,元素基本跟已有字符串一致。主要方法 replaceAll()

3.切割:根据自己的需求将字符串分割成多个字符串。主要方法 split()

4.获取获取符合要求的字符串子串。

习题:

  1. /*
  2. * 将IP字符串“192.168.1.150 2.2.2.2 10.16.48.123 56.78.123.253”按照网段顺序输出
  3. * 思路:
  4. * 1.使用String的split方法将各个IP地址分割开来。
  5. * 2.由于IP的每一段长度都不一样,无法进行准确的比较,我们需要将IP地址的每段都设置成3位,
  6. * 先给IP地址的每段前面添加两个0,然后取后三位,这样就可以统一起来。
  7. * 3.使用集合存放字符串输出,由于需要有顺序,所以使用TreeSet存放。
  8. */
  9.  
  10. import java.util.*;
  11. import java.util.regex.*;
  12.  
  13. class IPSortDemo
  14. {
  15. public static void main(String[] args)
  16. {
  17. String str = new String("192.168.1.150 2.2.2.2 10.16.48.123 56.78.123.253");
  18. str = str.replaceAll("([0-9]{1,3})","00$1");
  19. str = str.replaceAll("0+([0-9]{3})","$1");
  20. TreeSet<String> ts = new TreeSet<String>();
  21. String[] arr_str = str.split(" ");
  22. for(String s : arr_str){
  23. ts.add(s);
  24. }
  25.  
  26. Iterator iterator = ts.iterator();
  27. while(iterator.hasNext()){
  28. String temp = (String)iterator.next();
  29. sop(temp.replaceAll("0*(<a target=_blank target="_blank" href="file://\\d">\\d</a>+)","$1"));
  30. }
  31. }
  32.  
  33. public static void sop(Object obj){
  34. System.out.println(obj);
  35. }
  36. }


链接网络爬虫示例程序

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