使用indexOf计算字数

问题描述

我不能使用数组,只能使用简单的Java(ifforwhilesubstringlengthindexOf

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

应返回4

解决方法

首先,您进行了无限循环,因为count1,只需增加它即可。

第二,您甚至没有尝试在某些IDE中编写此代码,因为它会引发语法错误,因为在执行{{1时,您将string分配给int }}

因此,您可以使用count = myString.substring()

来代替循环使用count

如果您不关心myString.indexOf会发生什么,类似的事情可能会起作用

myString
,

已编辑:添加了其他情况下的丢失情况。

尝试以下代码:

使用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。

,

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

只需循环调用方法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);