Java进阶总结10——常用类3
正则表达式
/**
* 正则表达式:规则表达式
* 目的:处理字符串
* 写的技巧:
* 自左向右来写,先写元字符,再写量词,最后写逻辑
* */
package day14.regex;
public class RegecDemo {
public static void main(String[] args) {
//判断一个字符串是否由纯数字组成
/**
* 数字[0-9]
* \d 元字符
* + 量词 一次以上
* */
//规则 使用的时候加转义符\
String reg="\\d{4,6}";
//匹配
boolean r="123123".matches(reg);
System.out.println(r);
//匹配规则 qq号验证
//规则
reg="[1,9]\\d{4,9}";
//验证
r="123321".matches(reg);
System.out.println(r);
//验证手机号
//reg="[1]([3]|[5]|[7]|[8])\\d{9}";
reg="1[3578]\\d{9}";
r="15937583039".matches(reg);
System.out.println(r);
//验证用户名
reg="[a-zA-Z0-9]\\w{4,14}[a-zA-Z0-9]";
r="12312_o".matches(reg);
System.out.println(r);
//邮箱验证规则
reg="\\[email protected][a-zA-Z0-9]+\\.(com|cn)";
r="[email protected]".matches(reg);
System.out.println(r);
}
}
输出结果:
应用
package day14.regex;
public class RegexDemo1 {
public static void main(String[] args) {
//1.split 分割
String str="饮酒行令11,是中国人在饮酒时44助兴的一种特有方式qq,最早诞生于西周,完备于隋唐。";
//2.以逗号进行分割
//String reg=",";
//以叠词进行分割
String reg="(.)\\1";
//3.分割
String[]list=str.split(reg);
for (String tmp : list) {
System.out.println(tmp);
}
//替换 replace
//替换叠词
reg="(.)\\1+";
str=str.replaceAll(reg,"java" );
System.out.println(str);
}
}
输出结果:
正则匹配器
package day14.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo2 {
public static void main(String[] args) {
// 1.创建一个正则表达式
String reg="1[1578]\\d{9}";//规则
String str="15123123123";//要匹配的字符串
boolean r=str.matches(reg);
System.out.println(r);
//正则表达式匹配器
//1.通过reg规则关联创建一个Patter对象
Pattern p=Pattern.compile(reg);
//2.关联要操作的字符串,获取一个匹配器对象
Matcher m=p.matcher(str);
//3.匹配字符串是否符合要求
System.out.println(m.matches());
//4.替换字符串
System.out.println(m.replaceAll("Hello Java!"));
//5.分割字符串
Pattern p1=Pattern.compile("1");
String str1[]=p1.split("123123123123");
for (String tmp : str1) {
System.out.println(tmp);
}
/**
* 组的捕获
* 组就是一对小括号()
* (A(B(C(D)))(E))
* 1.ABCDE
* 2.BCD
* 3.CD
* 4.D
* 5.E
* */
/*str="asdasdsdfsdfxzc";//操作字符串
//划分组
reg="zxc";
//将正则转换成patter对象
Pattern p2=Pattern.compile(reg);
//关联操作字符串,返回一个Matche对象
Matcher m1=p2.matcher(str);
//匹配
System.out.println(m1.matches());*/
//匹配身份证号码
//首位不能为0,1-6代表区域
//年份前两位19|20 后两位\\d{2}
//月份(0[1-9]|(10|11|12))
//天数([0-2][1-9])|10|20|30|31
//后四位 前三位是数字 最后一位是数字或者X
//reg="[1-8]\\d{5}(19|20)\\d{2}(0[1-9])|(10|11|12)([0-2][1-9])|(10|20|30|31)\\d{3}[0-9]|X";
reg="[1-8]\\d{5}(\\d{4})(\\d{2})(\\d{2})\\d{3}[0-9X]";
String scard="123123123123123123";
//将正则转换成patter对象
Pattern p3=Pattern.compile(reg);
//关联操作字符串,返回一个Matche对象
Matcher m3=p3.matcher(scard);
//查找
if (m3.find()) {
//捕获组
System.out.println("总共"+m3.groupCount()+"组");
for (int i = 1; i <=3; i++) {
System.out.println("第"+i+"组"+m3.group(i));
}
//获取组的开始索引,和结束索引
System.out.println(m3.start(1)+"\t"+m3.end(1));
}
}
}
输出结果: