黑马程序员——正则表达式

来源:互联网 发布:卫生网络直报系统网址 编辑:程序博客网 时间:2024/06/05 04:33

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


-正则表达式(符合一定规则的表达式)
作用:专门用于操作字符串
特点:用于一些特定的符号来表示一些代码操作
好处:可以简化对字符串的复杂操作
弊端:规则字符定义的越多,越不便阅读,造成阅读性差

具体操作功能:-----参考查看API文档----
1、匹配:String matches()方法;用规则匹配整个字符串,只要有一处不符合规则,则返回false
2、切割:String split()
3、替换:String replaceAll();

4、获取:Pattern p = Pattern.compile(reg); Matcher m = p.matcher(str);

-练习1:对QQ号码进行校验
要求:5-15位,0不能为开头,而且只允许数字

public class Day25_01_Regex {public static void main(String[] args) {BufferedReader br = null;try {//从键盘获取输入注册号码System.out.println("请输入注册号码:");br = new BufferedReader(new InputStreamReader(System.in));String line = null;while((line=br.readLine())!=null){String qq = line;//进行校验checkQQ2(qq);}} catch (Exception e) {throw new RuntimeException("系统出现问题,暂时不能注销!");} finally {//释放资源if(!(br==null)){try {br.close();} catch (IOException e) {e.printStackTrace();}}}}//方法3:通过正则表达式进行校验public static void checkQQ3(String qq){String regex = "[1-9][0-9]{4,14}";boolean flag = qq.matches(regex);if(flag)System.out.println("您注册的qq号码为:"+qq);elseSystem.out.println("注册的qq号码不正确,请重输!");}//方法2:使用Integer.parseInt("123423add342");//将会产生java.lang.NumberFormatException:异常,从而达到校验目的public static void checkQQ2(String qq){int len = qq.length();if(len>=5 && len<=15){if(!qq.startsWith("0")){try {long l = Long.parseLong(qq);System.out.println("注册的qq号码为:"+qq);} catch (NumberFormatException e) {System.out.println("注册的qq号码不正确,请重输!");//e.printStackTrace();}}else {System.out.println("不能以0开头");}}else {System.out.println("长度不对");}}//方法1:常规判断public static void checkQQ1(String qq){int len = qq.length();if(len>=5 && len<=15){if(!qq.startsWith("0")){char[] arr = qq.toCharArray();//将字符串转换为字符数组boolean flag = true;for(int i=0;i<arr.length;i++){if(!(arr[i]>='0' && arr[i]<='9')){flag = false;break;}}if(flag){System.out.println("您注册的qq号码为:"+qq);}else{System.out.println("注册的qq号码不正确,请重输!");}}else {System.out.println("不能以0开头");}}else {System.out.println("长度不对");}}}

-正则表达式常用方法

1、匹配:String matches()
2、切割:String split()
3、替换:String replaceAll();

package day25_Regex;
public class Day25_02_RegexDemo {public static void main(String[] args) {//=========替换=========replace();//=========切割=========/* 按照叠词进行切割,为了可以让规则的结果被重用,可以将规则用()封装成一个组,组都是 有编号的,从1开始; 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取 *///通过叠词进行切割//split("zfdfdgddsdsqqerrebfd", "(.)\\1");//通过点"."进行切割//split("zhangsan.lisi.wangwu", "\\.");//通过空格" "进行切割//split("zhangsan lisi     wangwu", " +");//=========匹配=========//checkTelNum();//check();}//替换(  )public static void replace(){String str = "bdafdfffdsagdfdeeeeefswer";System.out.println(str);String regex = "(.)\\1+";String newStr1 = "\\$";//将叠词替换成$String newStr2 = "$1";//将叠词替换为它本身单个字符str = str.replaceAll(regex, newStr1);System.out.println(str);}//切割public static void split(String str, String regex){String [] arr = str.split(regex);System.out.println(arr.length);for(String s : arr){System.out.println(s);}}//匹配手机号码public static void checkTelNum(){String str = "13844336688";//定义匹配规则String reg = "1[358]\\d{9}";boolean b = str.matches(reg);if(b)System.out.println("有效手机号码:"+str);elseSystem.out.println("无效手机号码: "+str);}//匹配下面正则表达式public static void check(){String str = "v3843";String reg = "[a-zA-Z]\\d*";boolean b = str.matches(reg);System.out.println(b);}}

-正则表达式常见应用——获取
操作步骤:
1、将正则表达式封装成对象
2、让该对象和要操作的字符串相关联
3、关联后,获取正则匹配的引擎
4、通过引擎对符合规则的子字符串进行操作,比如取出

package day25_Regex;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Day25_05_RegexGet {public static void main(String[] args) {getStr();}//匹配下面正则表达式public static void getStr(){String str = "hao hao xue xi  tian tian xiang shang";System.out.println("原字符串: "+str);String reg = "\\b[a-zA-Z]{5}\\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());//用于获取匹配后结果System.out.println("matches:"+m.matches());//-----注意!为什么是false?-----while(m.find()){System.out.println(m.group());System.out.println(m.start()+"...."+m.end());}}}

-正则表达式应用——常见的校验

package day25_Regex;import java.util.TreeSet;//正则表达式的小练习public class Day25_06_RegexPractice {public static void main(String[] args) {checkMail();//ipSort();//test1();}//练习3:public static void checkMail(){String mail = "hello@outlook.com";String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)";//较为精确的匹配//reg = "\\w+@\\w+(\\.\\w+)+";//不太精确的匹配//mail = "1@1.1";//mail.indexOf("@")!=-1;System.out.println(mail.matches(reg));}//练习2://将ip地址(例如:193.22.2.44  11.3.4.22  55.3.44.2  3.111.223.10)进行地址段排序public static void ipSort(){String ip = "193.22.2.44  11.3.4.22  55.3.44.2  3.111.223.10";ip = ip.replaceAll("(\\d+)", "00$1");System.out.println(ip);ip = ip.replaceAll("0*(\\d{3})", "$1");System.out.println(ip);String[] arr = ip.split(" ");TreeSet<String> ts = new TreeSet<String>();for(String s : arr){ts.add(s);}for(String s : ts){System.out.println(s.replaceAll("0*(\\d+)", "$1"));}}//练习1://将"人人人之....之之...初初,性性性..本本本善善善" ---变为"人之初,性本善"public static void test1(){String str = "人人人之....之之...初初,性性性..本本本善善善";//1、先去掉"."str = str.replaceAll("\\.+", "");System.out.println(str);//2、叠词替换为该字符本身str = str.replaceAll("(.)\\1+", "$1");System.out.println(str);}}


0 0
原创粉丝点击