• java学习笔记06--正则表达式


    java学习笔记06--正则表达式

    正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆分、替换等操作。

    例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法

    不使用正则表达式

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str = "0123456789";  
    4.         boolean flag = true;   //定义一个标记变量  
    5.         char c[] = str.toCharArray();  
    6.         for (int i = 0; i < c.length; i++) {  
    7.             if(c[i]<'0'||c[i]>'9'){  
    8.                 flag = false;  
    9.                 break;  
    10.             }  
    11.         }  
    12.         if(flag){  
    13.             System.out.println("是全部由数字组成");  
    14.         }else{  
    15.             System.out.println("不是全部由数字组成");  
    16.         }  
    17.           
    18.     }  
    19. }  

    使用正则表达式

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str = "0123456789";  
    4.         if(Pattern.compile("[0-9]+").matcher(str).matches()){  
    5.             System.out.println("是全部由数字组成");  
    6.         }else{  
    7.             System.out.println("不是全部由数字组成");  
    8.         }  
    9.     }  
    10. }  


    Pattern、Matcher类

    这两个类为正则的核心操作类。这两个类都定义在java.util.regex包中.

    Pattern类的主要作用是进行正则规范(如之前的“【0-9】”就属于正则规范)的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范。

    d:表示数字,【0-9】

    D:表示非数字,【^0-9】

    w:表示字母、数字、下划线,【a-zA-Z0-9】

    W:【^a-zA-Z0-9】

    以上的正则,如果要想驱动起来,则必须依靠Pattern类和Matcher类

    Pattern主要是表示一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。

    Matcher类主要表示使用Pattern指定好的验证规则。

    在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法。

    例:验证一个字符串是否是合法的日期格式。

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str = "1990-04-13";  
    4.         String pattern = "\d{4}-\d{2}-\d{2}";  
    5.         Pattern p = Pattern.compile(pattern);   //实例化Pattern类  
    6.         Matcher m = p.matcher(str);             //实例化Matcher类  
    7.         if(m.matches()){  
    8.             System.out.println("是合法日期格式");  
    9.         }else{  
    10.             System.out.println("不是合法日期格式");  
    11.         }  
    12.     }  
    13. }  


    在Pattern类中也可以使用正则进行字符串的拆分功能。

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str = "AAA000BBB111CCC";  
    4.         String pattern = "\d+";  
    5.         Pattern p = Pattern.compile(pattern);  
    6.         String s[] = p.split(str);  
    7.         for (int i = 0; i < s.length; i++) {  
    8.             System.out.println(s[i]);  
    9.         }  
    10.           
    11.     }  
    12. }  

    还可以使用Matcher类中的字符串替换功能。

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str = "AAA000BBB111CCC";  
    4.         String pattern = "\d+";  
    5.         Pattern p = Pattern.compile(pattern);  
    6.         Matcher m = p.matcher(str);  
    7.         String s = m.replaceAll("---");  
    8.         System.out.println(s);   //AAA---BBB---CCC  
    9.     }  
    10. }  


     

    String类对正则的支持

    从之前的操作中,可以返现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。

    所以在JDK1.4之后,java对正则进行了一些扩充,在String中开始直接支持正则的操作。

    1. public class T {  
    2.     public static void main(String[] args) {  
    3.         String str1 = "AAA000BBB";  
    4.         String str2 ="1990-04-13";  
    5.         String str3 = "i_love_you";  
    6.         System.out.println("字符串替换:"+str1.replaceAll("\d+", "---"));  
    7.         System.out.println("字符串验证:"+str2.matches("\d{4}-\d{2}-\d{2}"));  
    8.         String s[] = str3.split("_");  
    9.         System.out.println("字符串拆分:");  
    10.         for(int i=0;i<s.length;i++){  
    11.             System.out.println(s[i]);  
    12.         }  
    13.           
    14.     }  
    15. }  


    总结:

    1、使用正则可以方便的完成字符串的验证、拆分、替换等复杂功能。

    2、在开发中一般都会直接使用String类中提供好的正则支持,而往往很少直接使用Pattern类或Matcher类。

    3、在一些正则应用的时候,对于一些敏感的字符要进行转义操作。

  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/timssd/p/4790460.html
Copyright © 2020-2023  润新知