问题描述
我不能使用数组,只能使用简单的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;
}
应返回4
解决方法
首先,您进行了无限循环,因为count
是1
,只需增加它即可。
第二,您甚至没有尝试在某些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);