-1

如果我有这个字符串“dog dog dog”,我想把它变成“cat bird turtle”之类的东西。

如果我运行这样的代码:

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

   }

我得到这样的东西:

但是,有没有办法在发现每只狗用不同的词时基本上覆盖它以获得我想要的上面提到的输出?即 dog1 -> cat, dog2 ->鸟, dog3 ->

4

2 回答 2

0

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

  1. 创建一个包含三个值的数组,您要替换
  2. 创建一个 int 变量并将值赋值为零。
  3. 当您在循环中找到匹配的“dog”时,只需将其替换为在步骤 2 中创建的最新变量变量 state。将该变量用作在 1 步骤中创建的数组的索引。
  4. 将 int 变量值增加 1。
  5. 用新字符串重置匹配器。

请注意,此代码并未考虑所有情况,如果语句中的狗超过 3 条,您可能需要重置 int 变量的计数器。除了正则表达式很有趣之外,您还可以在此处找到更多信息。

String haystack = "Dog Dog Dog";

模式 p = Pattern.compile("Dog");

字符串 [] 动物 = {“猫”、“鸟”、“乌龟”};

私人无效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); 
}
于 2013-09-28T07:52:21.193 回答
0

Lots of good ideas. I came up with this (which works and loops):

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());
于 2013-09-29T03:21:31.377 回答