Java 使用indexOf的while循环输出错误

Java 使用indexOf的while循环输出错误,java,string,while-loop,indexof,Java,String,While Loop,Indexof,我试图找出一个字符串在另一个字符串中出现了多少次。在我的测试中,我用“ea”表示单词一,用“Ilikedthebestontheeastbeachlest”表示单词二。我的输出为我的“外观”变量返回2,它应该存储“ea”在wordTwo中出现的次数。它应该返回3 我尝试过处理变量初始化,尝试用不同的方式思考数学,但我几乎没有想法 以下是相关代码部分: int wordTwoLength = wordTwo.length(); System.out.println(wordTwoLengt

我试图找出一个字符串在另一个字符串中出现了多少次。在我的测试中,我用“ea”表示单词一,用“Ilikedthebestontheeastbeachlest”表示单词二。我的输出为我的“外观”变量返回2,它应该存储“ea”在wordTwo中出现的次数。它应该返回3

我尝试过处理变量初始化,尝试用不同的方式思考数学,但我几乎没有想法

以下是相关代码部分:

  int wordTwoLength = wordTwo.length();
  System.out.println(wordTwoLength);

  while (wordTwoLength > 0)
  {
     positionCount = wordTwo.indexOf(wordOne, positionCount);
     appearances++;
     wordTwoLength = (wordTwoLength - positionCount);
  }
  System.out.println(appearances);
谢谢


编辑:我忘了添加我尝试了其他测试输入,得到了疯狂的输出。对于某些人来说,它返回的数字比预期的要高,而对于其他人来说则要低。

所以现在的问题是。indexOf仍然返回单词2中“ea”的真正索引-它不考虑从何处开始。此外,将positionCount设置为找到单词的位置,然后再次从该位置搜索,只会使您立即找到该单词的相同实例,而不是下一个实例


wordTwo中“ea”的第一个实例的索引是18,因此wordTwoLength将设置为32-18或14。然后在wordTwo中找到相同的ea实例,wordTwoLength将设置为14-18或-4。然后您将退出while循环,外观为2。

您可以通过“将字符串转换为字符数组”来简化上述工作。因为这样效率更高(我认为)。我在这里提供了一个示例代码

for (int index = 0; (index = wordTwo.indexOf(wordOne, index)) > -1; index ++)
    appearances ++;
String wordOne="Ilikedthebestontheeastbeachleast";
String wordTwo="ea";
int count=0;
char[] arrayOne=wordOne.toCharArray();
char [] arrayTwo=wordTwo.toCharArray();
for(int i=0;i<=((arrayOne.length)-1);i++)
{
if(arrayTwo[0]==arrayOne[i]&&arrayTwo[1]==arrayOne[i+1])
count+=1;
}
System.out.println("Pattern found "+count+" times.");
String-wordOne=“我把最好的东西放在最远的海滩上”;
字符串wordTwo=“ea”;
整数计数=0;
char[]arrayOne=wordOne.toCharArray();
char[]arrayTwo=wordTwo.toCharArray();
对于(int i=0;i请尝试以下更简单的代码:

class Demo{
public static void main(String[] args){
    String wordOne = "ea";
    String wordTwo = "Ilikedthebestontheeastbeachleast";
    String[] arr = wordTwo.split(wordOne);
    int cnt = arr.length - 1;
    System.out.printf("[%s] has occured for %s time(s) in [%s]", wordOne, cnt, wordTwo);
}

}

同一个问题是30分钟,这是一个不同的问题。如果你读了它,你就会知道。这是不允许的吗?这是有意义的。我将尝试用wordOne的长度修改positionCount变量。这样它将重新开始两个位置,跳过刚才看到的单词。谢谢!我们还没有了解。拆分。谢谢试试看,很简单。