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)); } }
提供了分组,可以实现对叠词的字符串的判定,还有对重叠内容的删除。重要内容已经写在代码中