使用递归方法查找String中的单词数

时间:2014-03-27 17:10:59

标签: java recursion

我想使用递归方法(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 任何人都可以帮助我运行此代码

4 个答案:

答案 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));
}

关于正在发生的事情的一些注意事项:

  1. Java命名约定规定您应该使用小写字母
  2. 启动方法名称
  3. if (i == sen.indexOf(" "))是红色的 - 你之前只是将i指定为,所以它总是会评估为真。
  4. 因此,您的递归永远不会被调用。您需要对其进行更改,以便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())); }