使用indexOf从while循环输出错误

时间:2013-10-16 04:48:22

标签: java string while-loop indexof

我试图找出一个字符串出现在另一个字符串中的次数。对于我的测试,我使用“ea”代替wordOne,“Ilikedthebestontheeastbeachleast”代表wordTwo。我的输出为我的“外观”变量返回2,它应该存储word2中“ea”出现的次数。它应该返回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);

谢谢!

编辑:我忘了添加我尝试了其他测试输入并获得了疯狂的输出。对于某些人来说,它会使数字高于预期,而对其他人来说则会更低。

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

for (int index = 0; (index = wordTwo.indexOf(wordOne, index)) > -1; index ++)
    appearances ++;

答案 2 :(得分:0)

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

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.");

这将符合您的需要,但使用For循环。

答案 3 :(得分:0)

尝试这个更简单的代码:

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

}