正则表达式_4_分组

package Regex;

/*
 *1 对分组的简介
 * 
 *2 切割字符串
  *     需求  按照叠词切割字符串"sdqqfgkkkhjppppkl"
 *3 替换字符串 
  *     需求  将"我我我......我我.....要....要...学.....学学...学....编.....编....程.....程"修改为"我要学编程"
 * 
 */
public class Pattern1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    demo1();//对分组的简介
    demo2();//切割字符串
    demo3();//替换字符串 
    }

    public static void demo3() {
        /*
         * 需求 将"我我我......我我.....要....要...学.....学学...学....编.....编....程.....程"修改为"我要学编程"
         * 思路:
         * (1)将.去掉
         * (2)去掉除了第一个的之外的重复的字
         * 
         */
        String s="我我我......我我.....要....要...学.....学学...学....编.....编....程.....程";
        String regex1="\\.";//去掉.的正则表达式
        s=s.replaceAll(regex1, "");//将全部的.替换为空串
        String regex2="(.)\\1+";//去掉重复字的正则表达式,至于为什么不一步完成,那是因为要求是保留文字,如果直接用regex2,则会把所有文字删除
        s=s.replaceAll(regex2, "$1");//将多次出现的字符串替换为第一组的值,$n,用来获取第n组的内容
        System.out.println(s);
    }

    public static void demo2() {
        //按照叠词切割字符串"sdqqfgkkkhjppppkl"
        String s ="sdqqfgkkkhjppppkl";
        //在写正则表达式的时候发现重复的字母的重复次数不等,如果再写(.)\\1只会把前两个相等做为切割条件,看下面的例子
        String regex1="(.)\\1";//只会把连续出现两个相同字母的串作为分隔条件
        String arr[]=s.split(regex1);
        System.out.println("以下是用(.)\\1作为正则表达式切割字符串s的结果");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        
        String regex2="(.)\\1+";//表示出现多次
        String arr1[]=s.split(regex2);
        System.out.println("以下是用(.)\\1+作为正则表达式切割字符串s的结果");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
    }

    public static void demo1() {
        String regex ="(.)\\1(.)\\2";//\\1表示第一组((.))再出现一次,\\2表示第二组有((.))再出现一次
        System.out.println("高高兴兴".matches(regex));
        System.out.println("快乐快乐".matches(regex));
        String regex1="(..)\\1";//\\1表示第一组((..))再出现一次
        System.out.println("高高兴兴".matches(regex1)); 
        System.out.println("快乐快乐".matches(regex1));
    }


}

提供了分组,可以实现对叠词的字符串的判定,还有对重叠内容的删除。重要内容已经写在代码中

猜你喜欢

转载自www.cnblogs.com/tkg1314/p/11819425.html