zoukankan      html  css  js  c++  java
  • Java学习笔记(18)

     替换     replaceAll(String regex, String replacement)

    package cn.itcast.regex;
    
    import java.util.Arrays;
    
    /*
     
     匹配    matches()
     
     切割    split()
     
             看有多少组就看有多少对括号,依次从左往右的每一对括号就为第几组
             ((A)(B(C)))
             第一组:((A)(B(C)))
             第二组:(A)
             第三组:(B(C))
             第四组:(C)
         1    引用第一组所匹配到的内容
         
     替换    replaceAll(String regex, String replacement)
     
     查找
     */
    public class Demo3 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //需求:编写一个正则表达式匹配一个手机号
            /*matchesPhone("13835026666");
            matchesTel("020-38325125");
            testSplit1();
            testSplit2();*/
            replaceTest1();
            replaceTest2();
        }
        public static void matchesPhone(String phone) {
            //String reg="1[34578]\d{9}";
            System.out.println(phone.matches("1[34578]\d{9}")?"合法手机号":"非法手机号");
        }
        //需求2:匹配固定电话
        public static void matchesTel(String tel) {
            System.out.println(tel.matches("0\d{2,3}-[1-9]\d{6,7}")?"合法固话":"非法固话");
        }
        //按照空格切割
        public static void testSplit1() {
            String str="明          天           放    假";
            String[] datas=str.split(" +");
            System.out.println("数组的元素:"+Arrays.toString(datas));
        }
        //根绝重叠词进行切割
        public static void testSplit2() {
            String str="大家家家明天天玩得得得得得得得得得得得开心";
            String[] datas=str.split("(.)\1+");//如果正则的内容需要被复用,那么需要对正则的内容进行分组。分组的目的就是为了提高正则的复用性。组号不能指定,组号是从1开始
            System.out.println("数组的元素:"+Arrays.toString(datas));
        }
        
        //替换
        public static void replaceTest1() {
            String str="如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126";
            String reg="1[34578]\d{9}";
            str=str.replaceAll(reg, "****");
            System.out.println("被替换的内容是:"+str);
        }
        
        public static void replaceTest2() {
            String str="我我我要要要做做做项项项项项项目目";//还愿结巴的话--------->我要做项目        把重叠词替换成单个单词
            str=str.replaceAll("(.)\1+", "$1");//如果需要在replaceAll方法正则的外部引用组的内容,那么是使用    "$组号"
            System.out.println(str);
        }
    }
    
    结果:
    被替换的内容是:如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****
    我要做项目

    查找  

    查找
    查找需要使用的对象:
    1.Pattern(正则对象)
    2.Matcher(匹配器对象)
    指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
    执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

    因此,典型的调用顺序是

    Pattern p = Pattern.compile("正则");
    Matcher m = p.matcher("字符串");
    boolean b = m.matches();

    匹配器要使用到的方法
    1.find() 通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false
    2.group() 获取符合规则的字串

    注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错

    单词边界匹配器
     单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符

    和空格什么的字符不一样

    public class Demo5 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("hello world".matches("hello\b world"));
        }
    
    }
    
    结果:
    true
    package cn.itcast.regex;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     
     查找
         查找需要使用的对象:
             1.Pattern(正则对象)
             2.Matcher(匹配器对象)
             指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
             执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
             
     因此,典型的调用顺序是
    
         Pattern p = Pattern.compile("正则");
         Matcher m = p.matcher("字符串");
         boolean b = m.matches();        
             
    匹配器要使用到的方法
        1.find()        通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false
        2.group()        获取符合规则的字串
        
    注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错
     */
    public class Demo4 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //找出三个字母组成的单词
            String content="da jia de jia qi wan bi liao hai kai xin ma";
            String reg="\b[a-zA-Z]{3}\b";
            //先要把字符串的正则编译成Pattern对象
            Pattern p=Pattern.compile(reg);
            //使用正则对象匹配字符串用于产生一个Matcher对象
            Matcher m=p.matcher(content);
            
            /*System.out.println("有符合规则的字符串吗?"+m.find());
            System.out.println("获取结果:"+m.group());*/
            
            while (m.find()) {
                System.out.println(m.group());
            }
        }
    
    }
    
    结果:
    jia
    jia
    wan
    hai
    kai
    xin

    在正则中,想要匹配一个点(.)的话,必须使用.来匹配。再使用反斜杠,就是\.

  • 相关阅读:
    关于在配置mysql的时候,总是在最后一步startservice的时候未响应出错
    html标签默认属性值之margin;padding值
    一个误区(关于javascript的字符串拼接)
    简单实用的下拉级联菜单
    js淡入淡出效果框架
    js多物体运动框架
    26 个 jQuery使用技巧(转载)
    js自定义滚动条完美兼容ff,IE
    CSS中单位px和em的区别解析
    js仿flash图片展示控件
  • 原文地址:https://www.cnblogs.com/zhangwugai/p/10812325.html
Copyright © 2011-2022 走看看