正则表达式:符合一定规则的表达式
作用:用于专门操作字符串
特点:用一些特定的符号来表示一些代码操作,简化书写
好处:简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性越差。
具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
2.切割:String split() 返回规则以外的字符串
3.替换:String replaceAll()
public class ZhengZe_01 { public static void main(String[] args) { // TODO Auto-generated method stub //checkQQ(); //demo(); //checkTel(); //splitDemo(); replaceAllDemo(); } public static void demo(){ String str="a"; String reg="[bcd]"; //第一个字符只能是bcd中一个 boolean b=str.matches(reg); System.out.println(b); } public static void checkQQ(){ /* 对QQ号进行校验 要求:5~15位,0不能开头,只能是数字 */ String qq="12434243"; String regex="[1-9][0-9]{4,14}"; boolean flag=qq.matches(regex); if(flag){ System.out.println(qq+"...is ok"); }else{ System.out.println(qq+"...不合法"); } } //匹配手机号 13XXX 15XXX 18XXX public static void checkTel(){ String tel="13966563456"; String reg="[1][358]\\d{9}"; System.out.println(tel.matches(reg)); } //切割 public static void splitDemo(){ //去除其中的空格 /*String str="zhangsan lisi wangwu"; String reg=" +";//按多个空格进行切割 String []arr=str.split(reg); for(String s:arr){ System.out.println(s); }*/ //取出c abc a.txt /*String dir="c:\\abc\\a.txt"; String reg="\\\\"; String [] arr=dir.split(reg); for(String s:arr){ System.out.println(s); }*/ //按照叠词完成切割 /*String str="erkktyqquio"; String reg="(.)\\1"; //引用第一组。为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成。组的出现都有编号,从1开始。想使用已有的组,可通过\n(n是组的编号)的形式来获取 String []arr=str.split(reg); for(String s:arr){ System.out.println(s); }*/ System.out.println("-------------"); String str1="dfrrrrfdlieets"; String reg1="(.)\\1+"; //第二个位置出现1次或多次 String []arr1=str1.split(reg1); for(String s:arr1){ System.out.println(s); } } //替换 public static void replaceAllDemo(){ //将字符串中的数字组替换成# String str="wer123ty34uiod234564fkjjd4324324f"; String reg="\\d{5,}"; String newStr="#"; str=str.replaceAll(reg,newStr); System.out.println(str); //将叠词替换成& String str1="erkktyqqquizzzzzo"; String reg1="(.)\\1+"; String newStr1="&"; str1=str1.replaceAll(reg1, newStr1); System.out.println(str1); //将叠词的字符换成单个字母 zzzz-->z String str2="erkktyqqquizzzzzo"; String reg2="(.)\\1+"; String newStr2="$1"; //拿前一个规则中的第一个组 str2=str2.replaceAll(reg2, newStr2); System.out.println(str2); } }
4.获取:将字符串中符合规则的子串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出
public class ZhengZe_02 { public static void main(String[] args) { // TODO Auto-generated method stub getDemo(); } public static void getDemo(){ //将3个字母的拼音取出来 String str="ming tian jiu yao fang jia le , da jia。"; String reg="\\b[a-z]{3}\\b"; // \\b单词边界 //将规则封装成对象 Pattern p=Pattern.compile(reg); //让正则对象和要操作的字符串相关联,获取匹配器对象 Matcher m=p.matcher(str); //将规则作用到字符串上,,并进行符合规则的子串查找 /*boolean b=m.find(); System.out.println(b); //用于获取匹配后的结果 System.out.println(m.group()); */ while(m.find()){ System.out.println(m.group()); System.out.println(m.start()+"..."+m.end()); //获取字符起始索引,[n1,n2) } } }
需求:将字符串转为 我要学编程
到底用什么功能呢?
思考方式:
1.如果只想知道该字符串是对是错,可以使用匹配
2.想要将已有字符串变成另一个字符串,替换
3.想要按照指定的方式将字符串变成多个字符串,切割(获取规则以外的子串)
4.想要拿到符合需求的字符串子串,获取(获取符合规则的子串)
public class ZhengZe_03 { public static void main(String[] args) { // TODO Auto-generated method stub test_1(); } public static void test_1(){ String str="我我...我我...我要...要要...要要要...学学学...学学...编编编...编程...程...程程...程...程"; /* 将已有字符串变成另一个字符串,使用 替换功能 1.可以先将 . 去掉 2.再将多个重复的内容变成单个内容 */ str=str.replaceAll("\\.+",""); //System.out.println(str); str=str.replaceAll("(.)\\1+","$1"); System.out.println(str); } }
将ip地址进行地址段顺序的排序
还按照自然字符串自然排序,只要让它们每一段都是3位即可。
1.按照每一段需要的最多的0进行补齐,那么每一段都会至少保证有3位
1.将每一段只保留3位。这样,所有的ip地址都是每一段3位
public class ZhengZe_04 { public static void main(String[] args) { // TODO Auto-generated method stub ipSort(); } public static void ipSort(){ String ip="192.68.1.254 102.49.23.013 10.10.10 2.2.2.2 9.109.90.30"; //在获取的每一个前面加00 ip=ip.replaceAll("(\\d+)","00$1"); //将每一个变成三位数 ip=ip.replaceAll("0+(\\d{3})", "$1"); System.out.println(ip); //如果不加0,10排在2前面 String []arr=ip.split(" "); TreeSet<String> ts=new TreeSet(); for(String s:arr){ ts.add(s); } for(String s:ts){ System.out.println(s.replaceAll("0+(\\d+)","$1")); } } }
对邮件地址进行校验
public class ZhengZe_05 { public static void main(String[] args) { // TODO Auto-generated method stub checkMail(); } public static void checkMail(){ String mail="[email protected]"; String reg="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}"; //较为精确地匹配 reg="\\[email protected]\\w+(\\.\\w+)+"; //非精确匹配 System.out.println(mail.matches(reg)); } }