Java正则表达式和字符串

时间:2013-09-28 06:51:52

标签: string

如果我有这个字符串“狗狗狗”我想把它变成像“猫鸟龟”的东西。

如果我运行这样的代码:

Pattern p = Pattern.compile("dog");
 Matcher m = p.matcher("dog dog dog");
    while(m.find())
       {
          System.out.println("group:"+m.group());

   }

我得到这样的东西:

  

     

     

但有没有办法在每只狗用一个不同的单词找到我上面提到的所需输出时基本上覆盖它们?即dog1 - > cat,dog2 - > bird,dog3 - > turtle

2 个答案:

答案 0 :(得分:0)

是的,你可以很容易地做到这一点。

  1. 创建一个包含三个值的数组,您要替换
  2. 创建一个int变量并将值赋值为零。
  3. 当您在循环中找到匹配的“dog”时,只需将其替换为在步骤2中创建的最新变量变量状态。将该变量用作在1步中创建的数组的索引。
  4. 将int变量值增加1。
  5. 使用新字符串重置匹配器。
  6. 请注意,此代码不考虑所有方案,如果语句中有多于3只狗,则可能需要重置int变量的计数器。 除了正则表达式很有趣之外,您还可以找到更多信息here

      

    String haystack =“狗狗狗”;

         

    模式p = Pattern.compile(“狗”);

         

    String [] animals = {“cat”,“bird”,“turtle”};

         

    private void findAndReplaceDog()       {

    Matcher matcher = p.matcher(haystack); 
    int i=0;
    while(matcher.find()){
    haystack = matcher.replaceFirst(animals[i]);
    i++;
    matcher.reset(haystack);
    }
    
    System.out.println(haystack); 
    }
    

答案 1 :(得分:0)

很多好主意。我想出了这个(工作和循环):

public static void main(String[] args) {
   Pattern p = Pattern.compile("dog");
   // get a matcher object
   Matcher m = p.matcher("dog dog dog dog dog dog"); 
   StringBuffer sb = new StringBuffer();
   int i=1;
   while(m.find())
   {
      if(i==1){m.appendReplacement(sb,"cat");i++;}
      else if(i==2){m.appendReplacement(sb,"bird");i++;}
      else if(i==3){m.appendReplacement(sb,"turtle");i=1;}

   }
   m.appendTail(sb);

   System.out.println(sb.toString());