while循环不运行indexOf搜索

时间:2013-10-16 04:18:19

标签: java string indexof

我试图找出一个字符串出现在另一个字符串中的次数。对于我的测试,我使用“ea”代替wordOne,“Ilikedthebestontheeastbeachleast”代表wordTwo。对于我的“外观”变量,我的输出返回0,该变量应存储在wordTwo中出现“ea”的次数。

以下是相关的代码部分:

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

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

4 个答案:

答案 0 :(得分:1)

问题在于您设置外观的值。

之间存在差异
appearances = appearances++;

appearances = ++appearances;

你所拥有的将分配外观的值,然后增加'旧'外观变量。您将要增加它然后分配它。

或者,你可以写

appearances++;

答案 1 :(得分:1)

这里有两个错误。

一个是你写的是appearances = appearances++;而不是appearances++;。这样做的结果是appearances递增,然后重置为其先前的值;换句话说,没有变化。

第二个错误是你在第一个搜索之后开始每个搜索,在找到匹配的位置。所以你只是一遍又一遍地找到同样的比赛。因此,您的输出将取决于positionCount变为负值之前可以减去wordTwoLength的次数。

如果必须的话,我将如何编写此方法。

public int numberOfOccurrences(String toExamine, String toFind) {
    int currentPosition = 0;
    int occurrences = 0;

    for(;;) {
       int index = toExamine.indexOf(toFind, currentPosition);
       if (index == -1) {
           return occurrences;
       }
       currentPosition = index + toFind.length();
       occurrences++;
    } 
}

答案 2 :(得分:1)

你是什么意思

 appearances = appearances++;

这将确保外观始终为零。

不应该只是出现++?

答案 3 :(得分:1)

我认为这可能是你的问题。行“appearances = appearances ++;”在您的情况下,将外观设置为0.这是因为++运算符递增变量但返回原始数字。你只想把“外观++;”。

即。它需要外观(为0)加1(使其值为1)然后返回0.所以基本上该语句相当于“appearances = 0;”。