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. PHP - 防止非法调用页面

    这是在服务器内部: 首先定义一个常量 在调用页面的时候,检测是否存在此常量 如果存在,则调用 否则,做出提示. 创建常量: 创建常量的函数名称: define //创建一个常量,以便于页面调用,从主页 ...

  2. uboot代码1:uboot启动大体流程, stage1 + stage2

    start.S stage 1: reset: set the cpu to svc32 mode disable the watchdog mask all IRQs(INTMSK, INTSUBM ...

  3. Mina airQQ聊天 服务端篇(二)

    Mina聊天服务端实现思路:在用户登录的时候.连接服务端而且验证登录用户,假设成功,则将IoSession保存到map<账号,IoSession>中,而且通知该用户的好友上线,然 后再请求 ...

  4. extjs_04_grid(弹出窗口&amp;行编辑器 CRUD数据)

    1.弹出窗口(添加.删除) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/f ...

  5. HDU 4424 Conquer a New Region 最大生成树

    给你一颗树 每条边有一个权值 选择一个点为中心 定义S值为中心到其它n-1个点的路径上的最小边权 求全部点S值的和 从大到小排序 每次合并2棵树 设为A集合 B集合 设A集合的最大S值的和为sumA ...

  6. socket为send和recv设置超时时间

    linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别 UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后 ...

  7. poj1860 解题报告

    题意:这里有N种货币,分别记为1~N,有M种货币交换的方式,每一种方式有A,B两种钱币,有RAB, CAB, RBA and CBA,四个数,表示交换率, Nick手上有其中的一种货币S,货币S的钱数 ...

  8. 安装ipvsadm报错

    server环境: [vagrant@localhost download]$ uname -a Linux RS1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 ...

  9. Servlet的学习之Cookie

    从本篇开始学习Servlet技术中的Cookie专题. 首先来了解什么是“会话”.会话是web技术中的一个术语,可以简单的理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭 ...

  10. 管道是如何处理HTTP请求的?

    管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...