Java 正在尝试添加“;和猫”;就在“;狗”;但是“;s&x201D;从“;狗”;每次都漏掉了

Java 正在尝试添加“;和猫”;就在“;狗”;但是“;s&x201D;从“;狗”;每次都漏掉了,java,string,Java,String,我试图在“dogs”之后替换add“and cats”,但每次都只从“dogs”中删除“s”,似乎无法获得正确的输出 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.i

我试图在
“dogs”
之后替换add
“and cats”
,但每次都只从
“dogs”
中删除
“s”
,似乎无法获得正确的输出

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);    
  }
}

现在我的输出是“我爱狗和猫!我有一只名叫可可的狗。我的狗非常聪明!”。但是
“s”
不见了,我想不出如何修复它。

你似乎把我要用的东西复杂化了:

String message=“我喜欢狗!我有一只狗叫Coco。我的狗非常聪明!”;
消息=消息。替换(“狗”、“狗和猫”);
System.out.println(消息);
这将返回:

I love dogs and cats! I have a dog named Coco. My dog's very smart!
代码的问题是第一个子字符串应该是:

String sub1 = message.substring(0 , i + 4);
包括最后的s。但是while将是无限的,因为字符串“dogs”仍然存在于
消息
字符串中,您应该通过增加
i
将while更改为仅在上一次查找之后进行检查,并从该索引上进行检查:

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!

你似乎把我想用的东西复杂化了:

String message=“我喜欢狗!我有一只狗叫Coco。我的狗非常聪明!”;
消息=消息。替换(“狗”、“狗和猫”);
System.out.println(消息);
这将返回:

I love dogs and cats! I have a dog named Coco. My dog's very smart!
代码的问题是第一个子字符串应该是:

String sub1 = message.substring(0 , i + 4);
包括最后的s。但是while将是无限的,因为字符串“dogs”仍然存在于
消息
字符串中,您应该通过增加
i
将while更改为仅在上一次查找之后进行检查,并从该索引上进行检查:

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!

我建议使用。子字符串中的上限是独占的,所以第一部分使用
I+4
,我建议使用。子字符串中的上限是独占的,所以第一部分也使用
I+4