java - 使用递归方法查找字符串中的单词数

标签 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 谁能帮我运行这段代码

最佳答案

你如何使用indexOf是问题所在。您将 i 设置为调用 indexOf 的结果,然后查看它是否等于使用相同参数对同一字符串调用 indexOf 的结果。测试结果 i == sen.indexOf("") 将始终为 true。这就是为什么你总是得到 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));
}

关于java - 使用递归方法查找字符串中的单词数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22694558/

相关文章:

java.io.StreamCorruptedException : invalid type code: 00

java - 在 Scala 中将 java 对象转换为 Object[]

java - 硬币变化递归方法

c - 二叉树遍历导致堆栈溢出

java - 如何证明 i++ 不是原子的

java - Springboot错误读取@PropertySource上的环境变量

java - 架构 java gwt+jsf2+spring 封装

c++ - 有没有办法用 clang 在 VisitCallExpr 方法中获取 CallExpr* 的调用者?

c# - 递归何时以及为什么比迭代执行得更差?

javascript - 监视递归 Angular Controller 方法