首页 > 解决方案 > 试图在“狗”之后添加“和猫”,但“狗”中的“s”每次都被遗漏了

问题描述

我试图在" and cats"之后替换 add ,"dogs"但我似乎每次都只能"s"从左边得到正确的输出。"dogs"

class Main {
  public static void main(String[] args) 
  {
    String message = "I love dogs! I have a dog named Coco. My dog's very smart!";
    int i = 0;
    
    while(message.indexOf("dogs") >= 0)
    {
      i = message.indexOf("dogs");
      String sub1 = message.substring(0 , i + 3);
      String sub2 = message.substring(i + 4);
      message = sub1 + " and cats" + sub2;
    }
    System.out.println(message);    
  }
}

现在我的输出是"I love dog and cats! I have a dog named Coco. My dog's very smart!". 但是"s"缺少了,我不知道如何解决这个问题。

标签: javastring

解决方案


您似乎使我只会使用replace的事情过于复杂:

String message = "I love dogs! I have a dog named Coco. My dog's very smart!";
message = message.replace("dogs", "dogs and cats");
System.out.println(message);

这将返回:

I love dogs and cats! I have a dog named Coco. My dog's very smart!

您的代码的问题是第一个子字符串应该是:

String sub1 = message.substring(0 , i + 4);

包括最后的 s。但是,由于字符串“dogs”仍然存在于message字符串中,while 将是无限的,您应该更改 while 以仅在前一个 find 之后通过i从该索引递增和检查来检查:

while(message.indexOf("dogs", i) >= 0)
{
  i = message.indexOf("dogs");
  String sub1 = message.substring(0 , i + 4);
  String sub2 = message.substring(i + 5);
  message = sub1 + " and cats" + sub2;
  i++;
}
System.out.println(message);

输出:

I love dogs and cats I have a dog named Coco. My dog's very smart!

推荐阅读