我想使用递归方法(java)计算字符串中的单词数
到目前为止我写了这段代码
public static int CountWords(String sen) {
int count = 0;
int i = sen.indexOf(" ");
if (sen.isEmpty()) {
return 0;
}else
if (i == sen.indexOf(" ")) {
return count++;
}
//sen.substring(0,sen.indexOf(" ")-1);
count++;
return count + CountWords(sen.substring(i + 1));
}
当我调用方法时,我总是得到0 任何人都可以帮助我运行此代码
答案 0 :(得分:3)
您如何使用indexOf
是问题所在。您将i
设置为调用indexOf
的结果,然后查看它是否等于在具有相同参数的同一字符串上调用indexOf
的结果。测试i == sen.indexOf(" ")
的结果将始终为真。这就是为什么你总是得到0的原因。
String#indexOf
将返回-1。 indexOf
在这里非常方便。
此外,您不需要本地计数变量。在这里引入一个变量只会让代码更难阅读,因为读者不得不四处寻找它的价值。
假设您的输入在单词之间总是只有一个空白,则可以这样做:
public static int countWords(String s) {
if (s.isEmpty()) return 0;
if (s.indexOf(" ") == -1) return 1;
return 1 + countWords(s.substring(s.indexOf(" ") + 1));
}
对于单词之间的多个空格,您可以检查空白并跳过它:
public static int countWords(String s) {
if (s.isEmpty()) return 0;
if (s.indexOf(' ') == -1) return 1;
if (s.charAt(0) == ' ') return countWords(s.substring(1));
return 1 + countWords(s.substring(s.indexOf(' ') + 1));
}
答案 1 :(得分:1)
这应该有效,我想:
public static int countWords(String sen) {
int i = sen.indexOf(" ");
if (sen.isEmpty()) {
return 0;
} else if (i == -1) {
return 1;
} else return 1 + countWords(sen.substring(i + 1));
}
关于正在发生的事情的一些注意事项:
if (i == sen.indexOf(" "))
是红色的 - 你之前只是将i
指定为,所以它总是会评估为真。sen
不为空并且至少包含一个空格时,countWords
会调用自身sen
减去第一个字。答案 2 :(得分:0)
此方法使用不带空格的String作为基本案例。然后它删除所有内容,包括String中的第一个空格并进行递归。
它处理空String的特殊情况和传递给方法的String以适当的空格开始的情况。
public static int CountWords(String sen)
{ int i = sen.indexOf(" ");
if(sen.isEmpty()) return 0; // special case
if(i == -1) return 1; // base case
if(i != 0)
return 1 + CountWords(sen.substring(i+1));
else
return CountWords(sen.substring(1));
}
答案 3 :(得分:-3)
这会有效 -
public static int CountWords(String sen) {
if("".equals(sen)){
return 0;
}
int count = 0;
int i = sen.indexOf(" ");
String substr = sen.substring(0,i+1) ;
if (i != -1) {
count++;
}else{
if(sen.length()>0){
count++;
}
sen="";
}
//sen.substring(0,sen.indexOf(" ")-1);
return count + CountWords(sen.substring(substr.length()));
}
public static int CountWords(String sen) {
if("".equals(sen)){
return 0;
}
int count = 0;
int i = sen.indexOf(" ");
String substr = sen.substring(0,i+1) ;
if (i != -1) {
count++;
}else{
if(sen.length()>0){
count++;
}
sen="";
}
//sen.substring(0,sen.indexOf(" ")-1);
return count + CountWords(sen.substring(substr.length()));
}