java学习笔记06--正则表达式
java学习笔记06--正则表达式
正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆分、替换等操作。
例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法
不使用正则表达式
- public class T {
- public static void main(String[] args) {
- String str = "0123456789";
- boolean flag = true; //定义一个标记变量
- char c[] = str.toCharArray();
- for (int i = 0; i < c.length; i++) {
- if(c[i]<'0'||c[i]>'9'){
- flag = false;
- break;
- }
- }
- if(flag){
- System.out.println("是全部由数字组成");
- }else{
- System.out.println("不是全部由数字组成");
- }
- }
- }
使用正则表达式
- public class T {
- public static void main(String[] args) {
- String str = "0123456789";
- if(Pattern.compile("[0-9]+").matcher(str).matches()){
- System.out.println("是全部由数字组成");
- }else{
- System.out.println("不是全部由数字组成");
- }
- }
- }
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()方法。
例:验证一个字符串是否是合法的日期格式。
- public class T {
- public static void main(String[] args) {
- String str = "1990-04-13";
- String pattern = "\\d{4}-\\d{2}-\\d{2}";
- Pattern p = Pattern.compile(pattern); //实例化Pattern类
- Matcher m = p.matcher(str); //实例化Matcher类
- if(m.matches()){
- System.out.println("是合法日期格式");
- }else{
- System.out.println("不是合法日期格式");
- }
- }
- }
在Pattern类中也可以使用正则进行字符串的拆分功能。
- public class T {
- public static void main(String[] args) {
- String str = "AAA000BBB111CCC";
- String pattern = "\\d+";
- Pattern p = Pattern.compile(pattern);
- String s[] = p.split(str);
- for (int i = 0; i < s.length; i++) {
- System.out.println(s[i]);
- }
- }
- }
还可以使用Matcher类中的字符串替换功能。
- public class T {
- public static void main(String[] args) {
- String str = "AAA000BBB111CCC";
- String pattern = "\\d+";
- Pattern p = Pattern.compile(pattern);
- Matcher m = p.matcher(str);
- String s = m.replaceAll("---");
- System.out.println(s); //AAA---BBB---CCC
- }
- }
String类对正则的支持
从之前的操作中,可以返现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。
所以在JDK1.4之后,java对正则进行了一些扩充,在String中开始直接支持正则的操作。
- public class T {
- public static void main(String[] args) {
- String str1 = "AAA000BBB";
- String str2 ="1990-04-13";
- String str3 = "i_love_you";
- System.out.println("字符串替换:"+str1.replaceAll("\\d+", "---"));
- System.out.println("字符串验证:"+str2.matches("\\d{4}-\\d{2}-\\d{2}"));
- String s[] = str3.split("_");
- System.out.println("字符串拆分:");
- for(int i=0;i<s.length;i++){
- System.out.println(s[i]);
- }
- }
- }
总结:
1、使用正则可以方便的完成字符串的验证、拆分、替换等复杂功能。
2、在开发中一般都会直接使用String类中提供好的正则支持,而往往很少直接使用Pattern类或Matcher类。
3、在一些正则应用的时候,对于一些敏感的字符要进行转义操作。
java学习笔记06--正则表达式的更多相关文章
- 【java学习笔记】正则表达式
一.正则表达式 1.预定义字符集 . 表示任意一个字符 \d 表示任意一个数字 \w 表示任意一个单词字符(只能是数字.字母.下划线) \s 表示任意一个空白字符(\t\r\n\f\x0B) \D ...
- java学习笔记之正则表达式
一般来说,正则表达式就是以某种方式来描述字符串,因此你可与说:"如果一个字符串符合有这些东西,那么它就是我正在找的东西. 1.要找一个数字,如果它可能有一个负号在最前面(可能没有,没有也是匹 ...
- 9.1(java学习笔记)正则表达式
一.正则表达式 1.1正则表达式 正则表达式是描述一种规则,通过这个规则可以匹配到一类字符串. 2.1正则语法 2.1.1普通字符:字母.数字.下划线.汉字以及没有特殊意义的符号都是普通字符. 正则表 ...
- Java学习笔记二——正则表达式
Java正则表达式 正则表达式的规则 “abc” 匹配字符串abc [abc] 匹配[]里任意一个字符 [a-z]: 匹配所有小写字母中的任意一个字符 [A-Z]: 匹配所有大写字母中的任意一个字符 ...
- Java学习笔记 06 数字格式化及数学运算
一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 20155234 2610-2017-2第九周《Java学习笔记》学习总结
20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
随机推荐
- POJ 3304 Segments(计算几何)
意甲冠军:给出的一些段的.问:能否找到一条直线,通过所有的行 思维:假设一条直线的存在,所以必须有该过两点的线,然后列举两点,然后推断是否存在与所有的行的交点可以是 代码: #include < ...
- Linux下基于Erlang的高并发TCP连接压力实验
1.实验环境: 联想小型机: 操作系统:RedHat Enterprise LinuxServer release6.4(Santiago) 内核版本号:Linux server1 2.6.32-35 ...
- C++ strcpy strcpy_s strncpy strlcpy
strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * s ...
- _splitpath / _wsplitpath 将绝对路径分割为盘符、路径、文件名、扩展名。
今天分享下一个路径分割的API,可以将一个完整的绝对路径分割为: 盘符(包括冒号:) 路径(包含前面&后面的\,不含盘符&文件名) 文件名(不含扩展名) 扩展名(包含前面的.) 先不说 ...
- VB.net总结
.NET视频差点儿相同用时一周结束,总体感觉就是"走耳不走脑".刚開始看视频理解起来有一点困难,台湾口音以及台湾与大陆计算机术语的差异,让我把前几集相当于直接忽略过了(建议打算看这 ...
- Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php
Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...
- 《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
1.read函数 调用read函数从文件去读数据,函数定义如下: #include <unistd.h> ssize_t read(int filedes, void* buff, siz ...
- css3 animation 参数详解
animation: name 2s ease 0s 1 both有人知道这后面的参数都代表什么意思吗 name 就是你创建动画的名称 2S表示的时长 ease表示运动效果 0S表示延迟时间 1表示的 ...
- Delete it
Problem A: Delete it Time Limit: 2 Sec Memory Limit: 64 MB Submit: 99 Solved: 25 Description 克林在 ...
- 圆角和圆形ImageView
※效果 ※代码 /** * 转换图片成圆形 * * @param bitmap * 传入Bitmap对象 * @return */ public Bitmap toRoundBitmap(Bitmap ...