Java常用类库--正则表达式(Pattern类、Matcher类)

2024-05-14 19:48

本文主要是介绍Java常用类库--正则表达式(Pattern类、Matcher类),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自http://blog.csdn.net/waldmer/article/details/13090335


1、认识正则


[java] view plaincopy
  1. public class RegexDemo01{  
  2.     public static void main(String args[]){  
  3.         String str = "1234567890" ;     // 此字符串由数字组成  
  4.         boolean flag = true ;           // 定义一个标记变量  
  5.         // 要先将字符串拆分成字符数组,之后依次判断  
  6.         char c[] = str.toCharArray() ;  // 将字符串变为字符数组  
  7.         for(int i=0;i<c.length;i++){ // 循环依次判断  
  8.             if(c[i]<'0'||c[i]>'9'){       // 如果满足条件,则表示不是数字  
  9.                 flag = false ;          // 做个标记  
  10.                 break ;                 // 程序不再向下继续执行  
  11.             }  
  12.         }  
  13.         if(flag){  
  14.             System.out.println("是由数字组成!") ;  
  15.         }else{  
  16.             System.out.println("不是由数字组成!") ;  
  17.         }  
  18.     }  
  19. };  

基本思路:就是将字符串拆分,之后一个个的进行比较的验证,但是这样比较麻烦,而且现在只是验证是否由数字组成,如果更加复杂的呢?
此时,将代码换成正则表达式,再观察效果;
[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. public class RegexDemo02{  
  3.     public static void main(String args[]){  
  4.         String str = "1234567890" ;     // 此字符串由数字组成  
  5.         if(Pattern.compile("[0-9]+").matcher(str).matches()){   // 使用正则  
  6.             System.out.println("是由数字组成!") ;  
  7.         }else{  
  8.             System.out.println("不是由数字组成!") ;  
  9.         }  
  10.     }  
  11. };  

2、Pattern、Matcher类





以上的正则,如果要想驱动起来,则必须依靠Pattern类和Matcher类。
Pattern主要是表示一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。
Matcher类主要表示使用Pattern指定好的验证规则。





[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. import java.util.regex.Matcher ;  
  3. public class RegexDemo03{  
  4.     public static void main(String args[]){  
  5.         String str = "1983-07-27" ;     // 指定好一个日期格式的字符串  
  6.         String pat = "\\d{4}-\\d{2}-\\d{2}" ;   // 指定好正则表达式  
  7.         Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
  8.         Matcher m = p.matcher(str) ;    // 实例化Matcher类  
  9.         if(m.matches()){        // 进行验证的匹配,使用正则  
  10.             System.out.println("日期格式合法!") ;  
  11.         }else{  
  12.             System.out.println("日期格式不合法!") ;  
  13.         }  
  14.     }  
  15. };  

在Pattern类中也可以使用正则进行字符串的拆分功能。
[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. import java.util.regex.Matcher ;  
  3. public class RegexDemo04{  
  4.     public static void main(String args[]){  
  5.         // 要求将里面的字符取出,也就是说按照数字拆分  
  6.         String str = "A1B22C333D4444E55555F" ;  // 指定好一个字符串  
  7.         String pat = "\\d+" ;   // 指定好正则表达式  
  8.         Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
  9.         String s[] = p.split(str) ; // 执行拆分操作  
  10.         for(int x=0;x<s.length;x++){  
  11.             System.out.print(s[x] + "\t") ;  
  12.         }  
  13.     }  
  14. };  

还可以使用Matcher类中的字符串替换功能。
范例:将字符串中的全部数字替换成“_”
[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. import java.util.regex.Matcher ;  
  3. public class RegexDemo05{  
  4.     public static void main(String args[]){  
  5.         // 要求将里面的字符取出,也就是说按照数字拆分  
  6.         String str = "A1B22C333D4444E55555F" ;  // 指定好一个字符串  
  7.         String pat = "\\d+" ;   // 指定好正则表达式  
  8.         Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
  9.         Matcher m = p.matcher(str) ;    // 实例化Matcher类的对象  
  10.         String newString = m.replaceAll("_") ;  
  11.         System.out.println(newString) ;  
  12.     }  
  13. };  

3、String类对正则的支持

从之前的操作中,可以发现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。
所以在JDK1.4之后,Java对正则进行了一些扩充,在String中开始直接支持正则的操作。

[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. import java.util.regex.Matcher ;  
  3. public class RegexDemo06{  
  4.     public static void main(String args[]){  
  5.         String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;  
  6.         boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;  
  7.         String s[] = "A1B22C333D4444E55555F".split("\\d+") ;  
  8.         System.out.println("字符串替换操作:" + str1) ;  
  9.         System.out.println("字符串验证:" + temp) ;  
  10.         System.out.print("字符串的拆分:") ;  
  11.         for(int x=0;x<s.length;x++){  
  12.             System.out.print(s[x] + "\t") ;  
  13.         }  
  14.     }  
  15. };  

但是,在使用正则的时候有一点是需要特表注意的。
现在,假设有如下的一个字符串的拆分程序:
[java] view plaincopy
  1. import java.util.regex.Pattern ;  
  2. import java.util.regex.Matcher ;  
  3. public class RegexDemo07{  
  4.     public static void main(String args[]){  
  5.         String info = "LXH:98|MLDN:90|LI:100" ;         // 定义一个字符串  
  6.         // 拆分的形式:  
  7.         /* 
  8.             LXH -->  98 
  9.             MLDN    -->  90 
  10.             LI  -->  100 
  11.         */  
  12.         String s[] = info.split("\\|") ;  
  13.         System.out.println("字符串的拆分:") ;  
  14.         for(int x=0;x<s.length;x++){  
  15.             String s2[] = s[x].split(":") ;  
  16.             System.out.println(s2[0] + "\t" + s2[1]) ;  
  17.         }  
  18.     }  
  19. };  

如果有时候发现一个字符串无法按照指定的字符拆分的话,则需要使用“\”转义,转义的时候两个“\”表示一个“\”。

4、总结

1、使用正则可以方便的完成字符串的验证、拆分、替换等复杂功能。
2、在开发中一般会直接使用String类中提供好的正则支持,而往往很少直接使用Pattern类或Matcher类。
3、在一些正则应用的时候,对于一些敏感的字符要进行转义操作。

这篇关于Java常用类库--正则表达式(Pattern类、Matcher类)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989686

相关文章

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环