黑马程序员——Java正则表达式
2015-03-09 10:23
405 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
自学Java第十四天笔记。本人是根据毕向东老师的JavaSE视频学习的。
2.作用:专门用于操作字符串。
3.特点:将对字符串操作的代码用一些符号来表示。这样就简化了书写。
4.好处:可以简化对字符串的复杂操作。
5.弊端:符号的出现虽然简化了书写,但是却降低了阅读性。
其实用的就是String类中的matches方法。
用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
例如:(QQ号的校验)
String qq = "83231256";
String reg = "[1-9][0-9]{4,14}";//定义规则
boolean b = qq.matches(reg);//将正则表达式和字符串关联对字符串进行匹配。
2.切割:(split)
其实用的就是String类中的split方法。
例如:
String str = "zhangsan,lisi,wangwu";
String reg = ",";
String[] arr = str.split(reg);
for(String s : arr)
{System.out.println(s);}
注意:
String reg1="\\."; //按 .切
String reg2=" +"; //按空格切,可能有一个空格或者多个空格
String reg3="(.)\\1+"; //按照出现两次或者以上的叠词切
3.替换:(replaceAll)
其实用的就是String类中的replaceAll();
例如:
String str1 = "wer111324ty34325";//将字符串中的数字换成#
String reg1 = "\\d{5,}";
str1.replaceAll(reg1,"#");
String str2 = "adfhhhtuaacvmmmmmzs";//将字符串中的叠词变成一个词,就是hhh变成h
String reg2 = "(.)\\1+";
str2.replaceAll(reg2,"$1");//将叠词替换为一个,其中$1表示符合组中一个字符
4.获取:(Pattern和Matcher对象)
将字符串中的符合规则的子串取出。
步骤:
1)、把正则表达式(规则)封装成对象。
2)、让正则对象和要操作的字符串相关联。
3)、关联后,获取正则匹配引擎。
4)、通过引擎对符合规则的子串进行操作,比如取出。
(代码 PatternDemo.java):
思路:
1)、如果只想知道字符串是对是错,使用匹配。
2)、想要将已有的字符串变成另一个字符串,使用替换。
3)、想要按照自定的方式将字符串变成多个字符串。使用切割。获取规则以外的子串。
4)、想要拿到符合需求的字符串子串。使用获取。获取符合规则的子串。
2.练习:
(代码 RegexTest.java):
自学Java第十四天笔记。本人是根据毕向东老师的JavaSE视频学习的。
Java正则表达式
一.理解:
1.概述:符合一定规则的表达式。2.作用:专门用于操作字符串。
3.特点:将对字符串操作的代码用一些符号来表示。这样就简化了书写。
4.好处:可以简化对字符串的复杂操作。
5.弊端:符号的出现虽然简化了书写,但是却降低了阅读性。
二.正则表达式具体操作功能:
1.匹配:(matches)其实用的就是String类中的matches方法。
用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
例如:(QQ号的校验)
String qq = "83231256";
String reg = "[1-9][0-9]{4,14}";//定义规则
boolean b = qq.matches(reg);//将正则表达式和字符串关联对字符串进行匹配。
2.切割:(split)
其实用的就是String类中的split方法。
例如:
String str = "zhangsan,lisi,wangwu";
String reg = ",";
String[] arr = str.split(reg);
for(String s : arr)
{System.out.println(s);}
注意:
String reg1="\\."; //按 .切
String reg2=" +"; //按空格切,可能有一个空格或者多个空格
String reg3="(.)\\1+"; //按照出现两次或者以上的叠词切
3.替换:(replaceAll)
其实用的就是String类中的replaceAll();
例如:
String str1 = "wer111324ty34325";//将字符串中的数字换成#
String reg1 = "\\d{5,}";
str1.replaceAll(reg1,"#");
String str2 = "adfhhhtuaacvmmmmmzs";//将字符串中的叠词变成一个词,就是hhh变成h
String reg2 = "(.)\\1+";
str2.replaceAll(reg2,"$1");//将叠词替换为一个,其中$1表示符合组中一个字符
4.获取:(Pattern和Matcher对象)
将字符串中的符合规则的子串取出。
步骤:
1)、把正则表达式(规则)封装成对象。
2)、让正则对象和要操作的字符串相关联。
3)、关联后,获取正则匹配引擎。
4)、通过引擎对符合规则的子串进行操作,比如取出。
(代码 PatternDemo.java):
import java.util.regex.*; class PatternDemo { public static void main(String[] args) { String str = "ming tian jiu yao fang jia le"; String reg = "\\b[a-z]{4}\\b"; //将规则封装成对象 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str); while(m.find())//将规则作用到字符串上,并进行符合规则的子串查找 { System.out.println(m.group());//用于获取匹配后结果 } } }
三.应用。
1.匹配,替换,切割,获取四种方法什么时候用到?思路:
1)、如果只想知道字符串是对是错,使用匹配。
2)、想要将已有的字符串变成另一个字符串,使用替换。
3)、想要按照自定的方式将字符串变成多个字符串。使用切割。获取规则以外的子串。
4)、想要拿到符合需求的字符串子串。使用获取。获取符合规则的子串。
2.练习:
(代码 RegexTest.java):
import java.util.*; import java.io.*; class RegexTest { public static void main(String[] args) { test_1(); test_2(); test_3(); test_4(); } /* 需求1:将下列字符串转成:我要学编程 "我我...我..我要...要...要要....学学....学学学......编编编...程...程程...." */ public static void test_1() { String str = "我我...我..我要...要...要要....学学....学学学......编编编...程...程程...."; str = str.replaceAll("\\.+","");//先把.去掉 System.out.println(str); str = str.replaceAll("(.)\\1+","$1");//再把叠词去掉 System.out.println(str); } /* 需求2:将ip地址进行地址段顺序的排序。 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30 */ public static void test_2() { String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; ip = ip.replaceAll("(\\d+)","00$1");//保证每段至少都有三位 System.out.println(ip); ip = ip.replaceAll("0*(\\d{3})","$1");//每段只保留三位 System.out.println(ip); TreeSet<String> ts = new TreeSet<String>(); String[] arr = ip.split(" "); for(String s : arr) { ts.add(s); } for(String s : ts) { System.out.println(s.replaceAll("0*(\\d)","$1"));//把每段前面多余的0替换掉 } } /* 需求3:对邮件地址进行校验: */ public static void test_3() { String mail = "83231256@qq.com"; String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-z]+)+"; System.out.println(mail.matches(reg)); } /* 网络爬虫(蜘蛛): 实际上是一个功能,用于搜集网络上的指定信息。 需求4:获取指定文档中的邮件地址。使用获取功能。Pattern Matcher */ public static void test_4() { BufferedReader bufr = new BufferedReader(new FileReader("mail.txt")); String reg = "\\w+@\\w+(\w+)+"; Pattern p = Pattern.compile(reg); String line =null; while((line=bufr.readLine())!=null) { Matcher m = p.matcher(line); while(m.find()) { System.out.prinln(m.group()); } } } }
相关文章推荐
- 黑马程序员-Java语言基础–正则表达式 第25天
- 黑马程序员java笔记之七-----正则表达式
- 黑马程序员 java基础之正则表达式
- 黑马程序员_毕向东JAVA基础_正则表达式
- 黑马程序员——Java 网络通信 正则表达式
- 黑马程序员_java入门_正则表达式
- 黑马程序员—java基础之反射与正则表达式
- 黑马程序员 java_正则表达式笔记
- 黑马程序员——java之正则表达式
- 黑马程序员_Java学习日记第八天--TCP/UDP通信、正则表达式
- 黑马程序员 Java正则表达式
- 黑马程序员_Java学习日记21_正则表达式
- 黑马程序员----JAVA基础之正则表达式
- 黑马程序员-java专题系列之1-正则表达式
- 黑马程序员_Java基础_正则表达式
- 黑马程序员java笔记之七-----正则表达式
- 黑马程序员_java正则表达式学习
- 黑马程序员-Java基础-正则表达式
- 黑马程序员——18Java正则表达式及应用
- 黑马程序员_Java第25天知识总结_正则表达式_匹配_切割_替换_获取_Pattern_Matcher