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. }

使用正则表达式

  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. }

还可以使用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. }

总结:

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

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

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

java学习笔记06--正则表达式的更多相关文章

  1. 【java学习笔记】正则表达式

    一.正则表达式 1.预定义字符集  . 表示任意一个字符 \d 表示任意一个数字 \w 表示任意一个单词字符(只能是数字.字母.下划线) \s 表示任意一个空白字符(\t\r\n\f\x0B) \D ...

  2. java学习笔记之正则表达式

    一般来说,正则表达式就是以某种方式来描述字符串,因此你可与说:"如果一个字符串符合有这些东西,那么它就是我正在找的东西. 1.要找一个数字,如果它可能有一个负号在最前面(可能没有,没有也是匹 ...

  3. 9.1(java学习笔记)正则表达式

    一.正则表达式 1.1正则表达式 正则表达式是描述一种规则,通过这个规则可以匹配到一类字符串. 2.1正则语法 2.1.1普通字符:字母.数字.下划线.汉字以及没有特殊意义的符号都是普通字符. 正则表 ...

  4. Java学习笔记二——正则表达式

    Java正则表达式 正则表达式的规则 “abc” 匹配字符串abc [abc] 匹配[]里任意一个字符 [a-z]: 匹配所有小写字母中的任意一个字符 [A-Z]: 匹配所有大写字母中的任意一个字符 ...

  5. Java学习笔记 06 数字格式化及数学运算

    一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  8. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

  9. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

随机推荐

  1. Unicode编码(转)

    随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...

  2. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...

  3. 使用tmux [FreeBSDChina Wiki]

    使用tmux [FreeBSDChina Wiki] 使用tmux tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个 ...

  4. JCL学习

    JCL基本概念 定义:job control language 用户与操作系统的接口,用户通过JCL语句按照自己的意图来控制作业的执行. JOB的概念:把大机要实现的每一项任务,称为一个JOB或作业. ...

  5. oracle 分区表exchange原理

    oracle分区的exchange操作非常快,那原理是什么呢?下面我们来做个实验: SQL> create table test (id number(3)); 表已创建. SQL> in ...

  6. 相遇Qt5

    使用Qt5.x版本中的不同方面来开发应用程序,着重于新的Qt Quick的技术,提供了编写C++后端的必要内容,并扩展了Qt Quick.     本章提供了关于Qt5高层次的概述.它对开发者有效的展 ...

  7. 14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE

    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE 回收操作系统磁盘空间当truncate 一个InnoDB ...

  8. webdynpro 下拉列表控件

    现在界面上添加下拉列表的控件DropDownByKey 在context中创建新的node,和属性DP 返回界面,绑定DP到控件DropDownByKey的SelectedKey 初始方法中代码如下: ...

  9. QNX系统-关于delay函数与sleep函数的区别

    QNX是类unix系统.在c语言编程过程中,往往会用到delay或者sleep延时函数.两者之间在使用上有一定的区别!!! delay()是循环等待,该进程还在运行,占用处理器. sleep()不同, ...

  10. redis+tomcat共享session问题(转)

    为了让楼主看看Java开发是多么的简单和轻松,你说你耗时一周都没搞好,简直就是胡说八道!!我从没搞过reids和tomcat整合的(我做的项目一直都是去session用cookie,为了验证你在胡说八 ...