使用 indexOf 统计单词

Count Words Using indexOf

我不会用数组,只能用简单的Java (if, for, while, substring, length, indexOf)

public int howManyWords(String s){
        
    myString = "I have a dream";
    int count = 1;
    int length = 0;
    while(count>=0){
        
        count = myString.substring(String.valueOf(length),myString.indexOf(" "));
        count++;
        length = myString.indexOf(" ");
    
    }
    
     return count;
}

应该return4

已编辑:添加了缺失的 else 案例。

试试下面的代码:

使用 substring 和 indexOf 从字符串中删除计数的单词,并在每次迭代中增加计数。

public int countWords(String s){
        
    String myString = "I have a dream";
    int count = 0;
    int length = myString.length();
    while(length>0){
        if((myString.indexOf(" ")!=-1) && (myString.indexOf(" ")+1)<length){
            myString = myString.subString(myString.indexOf(" ")+1);
            count++;
            length = myString.length();
        }
        else {
            length = 0;
            break;
        }
    
    }
    
     return count;
}

PS: 按照惯例,你的方法名称应该表示动作,因此我建议它是 countWords 而不是 howManyWords。

首先,你做了无限循环,因为count1,你只是增加它。

其次,您甚至没有尝试在某些 IDE 中编写此代码,因为它会抛出语法错误,因为您正在将 string 分配给 int,当你做 count = myString.substring()

因此,您可以使用 myString.indexOf

而不是在循环中使用 count

如果您不关心 myString

会发生什么,这样的方法可能会起作用
int count = 0;

while(myString.indexOf(" ") >= 0) {
  count++;
  myString = myString.substring(myString.indexOf(" ") + 1)
}

return count;

让我们假设您正在测试的字符串包含前导或尾随空格,因为这会影响解决方案。您问题中的示例字符串不包含前导空格或尾随空格。

只需在循环中调用方法 indexOf(String, int),并且在每次迭代中将 int 参数设置为比上一次迭代中获得的参数多一个。一旦方法 indexOf() 返回的值为 -1(减一),您就完成了。但是不要忘记在退出循环后添加最后一个词。

String myString = "I have a dream";
int count = 0;
int index = 0;
while (index >= 0  &&  index < myString.length()) {
    index = myString.indexOf(" ", index);
    System.out.println("index = " + index);
    if (index >= 0) {
        index++;
        count++;
    }
}
if (index < 0) {
    count++;
}
System.out.println("count = " + count);