黑马程序员(四):正则表达式的几种应用

来源:互联网 发布:淘宝网商家个人中心 编辑:程序博客网 时间:2024/06/08 14:31
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串
特点:用于一些特点的符号来表示一些代码操作,这样就简化书写。
好处:可以简化对字符串的复杂操作。
弊端:


具体操作功能:
1,匹配 String matches方法。用于规则匹配整个字符串,只要有一处不符合规则就匹配结束返回false
2,切割 String split();
3. 替换
4. 获取 将字符串中的符合规则的字串取出
步骤:1,先将正则表达式封装成对象
 2,将正则对象和要操作的字符串相关联。
 3,关联后,获取正则匹配引擎

 4,通过引擎对符合规则的子纯进行操作。比如取出.

class  Demo{public static void main(String[] args) {//匹配matche("b9238","[a-zA-Z]\\d");matche("b9238","[a-zA-Z]\\d*");matche("234455","[1-9][0-9]{4,11}");//匹配qq号。6-13位.//切割splitDemo("c:\\abc\\a.txt","////");//用两个反斜杠\切割。但是每个\都要用\转义一下。所以变成\\\\ 结果是 c: abc a.txtsplitDemo("asf.agsg.gg","\\.");//道理同上.是一个通配符。如果当成字符.进行切割的话需要\转义。但是\也要转义下//所以要用\\.  结果是:asf agsg ggsplitDemo("erkkyezgzefggewed","(.)\\1+");//按照叠词完场切割,为了可以让规则的结果被重用//可以将规则封装成一个组,用()完成,组的出线都有编号。从1开始想要使//已有的组可以通过\n(n就是组的编号)的形式来获取。//替换String str="wer1389890000999ty123456uiod1234345433f";//要求将字符串中的数字替换成#replaceAllDemo(str,"\\d{5,}","#");//数字连续出现5次以上的替换成#;String str1="erkkyezgzefggewed";//要求将叠词替换成#replaceAllDemo(str1,"(.)\\1+","#");String str2="erkkyezgzefggewed";//要求将叠词单个字母zzzz----zreplaceAllDemo(str2,"(.)\\1+","$1");//$1特殊符号代表前面规则的第一个组。}public static void matche(String str,String reg){boolean b=str.matches(reg);System.out.println(b);}public static void splitDemo(String str,String reg){//根据切割符号把字符串切割成数组String[] arr=str.split(reg);//打印下切割完之后的字符串长度//System.out.println(arr.length);for(String s:arr)//高级for循环{System.out.println(s);}}public static void replaceAllDemo(String str,String reg,String newStr)//依次表示 初始字符串 替换的字符串规则 替换成新的字符串{str=str.replaceAll(reg,newStr);System.out.println(str);}}
几种示例的打印结果分别是

false
true
true
c:\abc\a.txt
asf
agsg
gg
er
yezgzef
ewed
wer#ty#uiod#f
er#yezgzef#ewed
erkyezgzefgewed



下面代码是获取的应用

class RegexDemo{public static void  main(String[] args){String str="ming tian jiu yao fang jia le ,da jia.";//将规则封装成对象String reg="\\b[a-z]{4}\\b";// 匹配器规则是四个字母的单词\\b代表单词标界。Pattern p=Pattern.compile(reg);//将正则对象和要作用的字符串相关联。获取匹配器对象。Matcher m=p.matcher(str);//System.out.println("matches:"+m.matches());//用于获取匹配后规则。第一个用法其实就是他的简写while(m.find()) //匹配器开始工作查找,每次查找都会从匹配器指针的位置继续向下查找知道结束。类似迭代器{System.out.println(m.group());//把匹配器查找到的匹配的结果打印出来System.out.println(m.start()+","+m.end());//匹配器每次匹配到结果所开始的指针序列号和结束的指针序列号。}}}

打印结果是:

ming
0,4
tian
5,9
fang
18,22


下面几个小例子。。对正则表达式深入了解下。

class Demo{public static void main(String[] args){test_1();test_2();}public static void test_1(){String str="我...我我...我要...要要....要学学...学学学编....编....编编程....程.....程";//转译成我要学编程String regex1="\\.";String str1=str.replaceAll(regex1,"");//去掉.String regex2="(.)\\1*+";String str2=str1.replaceAll(regex2,"$1");//去掉重复的字并且保留第一个字System.out.println(str2);}public static void test_2(){String str="192.68.1.254 102.49.23.130 10.10.10.10 2.2.2.2 8.109.90.30";//将ip地址按照数字顺序进行提取//转成集合进行排序。。String str1=str.replaceAll("([0-9]{1,3})","00$1");//进行补0,因为字符串排序时一个一个字符排序的。10会比2排在后面所以补0System.out.println(str1);String str2=str1.replaceAll("0{1,2}([0-9]{3})","$1");//把超过3位的前面0去掉System.out.println(str2);String[] str3=str2.split(" ");TreeSet<String> ts=new TreeSet<String>();//创建treeset集合。数组放进去后会自动排序for(String s:str3){ts.add(s);}for(String s:ts){System.out.println(s.replaceAll("0+(\\d+)","$1"));//排序号的。数组打印出来}}}



0 0
原创粉丝点击