我们必须计算具有多个“ this”子字符串的给定字符串中“ this”的数目。例如。 “你好,这是新兵,这是老兵,这是这个”
将返回4。

所以我正在使用:

    StringTokenizer stringTokenizer1 = new StringTokenizer(input2);
    ArrayList<String> arrayList1 = new ArrayList<String>();
    int count=0;
    int arrIndex = stringTokenizer1.countTokens();

    for (int i = 0; i < stringTokenizer1.countTokens(); i++)
    {
        arrayList1.add(stringTokenizer1.nextToken());
    }

    for (String string2 : arrayList1)
    {
        if (string2.equals(string))
        {
            count++;
        }
    }

    output1 = count;
    System.out.println(output1);


仅返回2。

但是,如果为int arrindex分配了stringTokenizer1.countTokens()的值并在循环条件下使用,它将给出正确的结果4。

注意:使用JavaSE-1.6

最佳答案

每次重新进入循环时,都会评估条件stringTokenizer1.countTokens()

Per the javadoc


  计算此令牌生成器的nextToken方法在生成异常之前可以被调用的次数。当前位置未提前。


这意味着countTokens()会在您每次调用nextToken()时发生变化

以你的例子:


对于i = 0,countTokens = 4->进入循环->调用nextToken()-> countTokens = 3
对于i = 1,countTokens = 3->进入循环->调用nextToken()-> countTokens = 2
对于i = 2,countTokens = 2->退出循环

10-07 19:45