String s = "我我我我我我我..........我........要要要要要.............要要要要....学习习习..." +
"...习习习习习习习习习编程程程程程程程程程程程.....程程程程程程程程";
String regex = "\\.";
//先将.去掉
s=s.replaceAll(regex,"");
System.out.println("=======去掉.后=======");
System.out.println(s);
System.out.println("=======去掉叠词后=======");
System.out.println(s.replaceAll("(.)\\1+","$1"));
运行结果:
关于对"(.)\\1+" 的理解 :
程序是这样运行的:先匹配挎号(),括号里面是“.”任意字符,也是就是匹配到了“我”这个字符,
然后\\1方向引用取到第一个挎号的匹配内容’我‘。 ——\\是第一个\是转义这样才能表示出 '\1'
并且+,匹配此字符出现一次或者多次
随后将这个匹配到的整体替换为$1指代()里匹配到的字符。
这样就讲一个字符出现多次的替换成了一个字符
如果是ABAB型叠词 列如:我要我要学习编程
我们就可以换成
regex="(..)\\1+";
来匹配ABAB型。