Wrong output from a while loop using indexOf [duplicate]

时间秒杀一切 提交于 2019-12-13 22:40:32

问题


I'm trying to find out how many times one string appears in another. For my testing, I'm using "ea" for wordOne and "Ilikedthebestontheeastbeachleast" for wordTwo. My output is returning 2 for my "appearance" variable, which should store how many times "ea" appears in wordTwo. It should return 3.

I've tried messing with variable initializations, and trying to think of the math differently, but I'm pretty much out of ideas.

Here's the relevant code section:

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

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

Thanks!

Edit: I forgot to add that I tried other test inputs and got crazy outputs. It would return numbers way higher than expected for some, and lower for others.


回答1:


So now the problem is that .indexOf still returns the true index of "ea" in wordTwo - it doesn't take into account where you start from. Also, setting positionCount equal to where you find the word and then searching from that position again is just going to make you immediately find the same instance of that word, not the next one.

The index of the first instance of "ea" in wordTwo is 18, so wordTwoLength will be set to 32-18, or 14. Then you'll find the same instance of ea in wordTwo, and wordTwoLength will be set to 14-18, or -4. Then you'll exit the while loop, with appearances being 2.




回答2:


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



回答3:


Try this simpler code:

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

}




回答4:


You can simplify your above work by "Converting String to Character array".Because it will be more Efficient(I think).I have provided a sample code here,

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

This will suits your need but using For loop.



来源:https://stackoverflow.com/questions/19395447/wrong-output-from-a-while-loop-using-indexof

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!