java day16第十六课 正则表达式
正则表达式
正则表达式用于操作字符串数据
通过一些特定的符号来体现的
所以我们学习掌握正则表达式,必须要学习一些符号
package com.rf.zhengze;
public class QqDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 需求:定义一个功能对qq进行校验
* 要求:长度为6~15位,只能是数字,0不能开头
*
*/
String str = "12d456";
// checkQQ(str);
String regex = "[1-9][0-9]{4,14}";//正则表达式
System.out.println(str+"匹配结果:"+str.matches(regex));
}
public static void checkQQ(String qq){
int len = qq.length();
if(len > 5 && len < 16){
if(!qq.startsWith("0")){
try {
long l = Long.parseLong(qq);
System.out.println(l+"正确");
} catch (NumberFormatException e) {
// TODO: handle exception
System.out.println(qq+"含有非法字符");
}
}else{
System.out.println(qq+"不能以0开头");
}
}else{
System.out.println(qq+"长度错误");
}
}
}
匹配
//其实就是使用的就是String类中的matches方法
//匹配手机号码是否正确
public static void phoneRegex(){
String tel = "18227284635";
String regex = "1[3578][0-9]{9}";
System.out.println(tel.matches(regex));;
}
切割
//其实使用的就是String类中的split方法
public static void splitDemo(){
// String str = "zhangsan lisi wangwu";
// String[] names = str.split(" +");
// for(String name:names){
// System.out.println(name);
// }
String str = "zhangsanyyyylisi888888wangwu";
// String[] names = str.split("\\.");//.在正则中表示特殊符号,所以需要转译
String[] names = str.split("(.)\\1+");
for(String name:names){
System.out.println(name);
}
}
替换
//其实使用的就是String类里面的replaceAll方法
public static void replaceAllDemo(){
String str = "zhangsanyyyylisi888888wangwu";
// str = str.replaceAll("(.)\\1+", "#");
str = str.replaceAll("(.)\\1+", "$1");//一个方法里面,第一个参数里面用到了正则的话,第二个想用里面的参数用$符号,"$1"表示获取前一个参数中的第一组
System.out.println(str);
}
如何实现182****8633???
获取
//将正则规则进行对象封装
// Pattern p = Pattern.compile("a*b");
//通过正则对象的matcher方法和字符串关联,获取要对字符串操作的匹配器对象Matcher
// Matcher m = p.matcher("aaaaab");
//通过Matcher匹配器对象的方法对字符串进行操作
// boolean b = m.matches();
public static void huoqvDemo(){
String str = "da jia hao,ming tian fang jia";
String regex = "\\b[a-z]{3}\\b";
//1、将正则封装成对象
Pattern p = Pattern.compile(regex);
//2、通过正则对象获取匹配器对象
Matcher m = p.matcher(str);
//使用Matcher对象对方法对字符串进行操作
//既获取三个字母组成对单词
//查找 find()
// m.find();
// System.out.println(m.group());//获取匹配对子序列
System.out.println(str);
while(m.find()){
System.out.println(m.group());
System.out.println(m.start()+" "+m.end());
}
}
总结:
正则表达式:符合一定规则的表达式
作用:抓们操作字符串
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则就越长,阅读性就越差
练习:
1、去重
需求String str = "我我...我我我...我我....是....是是是...是是..你你...你你大大大....大大..哥哥哥...哥哥哥";最后输出:我是你大哥
2、ip地址进行排序
String str = "192.168.15.10 127.0.0.1 3.3.3.3 105.77.11.55";
要求排序结果:
3.3.3.3
105.77.11.55
127.0.0.1
192.168.15.10
3、校验邮箱地址