在做小练习时,能写出了标准答案:方法一
然后还考虑测试下获取的方法:于是写了方法二,只是自己做下测试
结果发现了问题
方法二中,不论
reg="(.)\\1+";
reg="(.)\\1+{0,2}";
reg="\\b(.)\\1+\\b";
都是输出0,也就是m.find()为false,未找到匹配
为什么呢?
- /*
-
- */
- import java.util.regex.*;
- class RegexTest
- {
- public static void main(String[] args)
- {
- test_1();
- }
- /*
- 需求:
- 将下列字符串转成:我要编程。
-
- 到底用四种功能中哪一个?或者哪几个?
- 思路:
- 1,如果只想知道该字符对错,使用匹配。
- 2,想要将已有的字符串变成另一个字符串,替换。
- 3,想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串。
- 4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
- */
-
- public static void test_1()
- {
- String str="我我...我我...我要..要要...学学学...学学...编编编...编程...程.程程程...程...程";
- /*方法一,标准方法
- 将已有字符串变成另一个字符串。使用替换功能。
- 1,可以先将.去掉。
- 2,再将多个重复的内容变成单个内容。
- */
- /*
- String reg="\\.+";
- str=str.replaceAll(reg,""); //两句可以简化成一句
- reg="(.)\\1+";
- str=str.replaceAll(reg,"$1");
- sop(str);
- */
-
- //方法二
- String reg="(.)\\1+{0,2}";
- Pattern p=Pattern.compile(str);
- Matcher m=p.matcher(reg);
- sop("0");
- while(m.find())
- {
- sop("1");
- String s=m.group();
- sop(s);
- sop("2");
- if(s.equals("\\."))
- {
- sop("3");
- continue;
- }
- sop(s);
- }
- }
-
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
复制代码
|