试图递归计算字符串中的空格?

时间:2013-05-07 01:37:33

标签: java string recursion for-loop static-methods

编辑:真的很抱歉,我的意思是Java!至于我的想法,我会说第一个包含if语句是针对s == null还是长度为0,但是我对于放在

中的内容感到困惑

返回spaceCount(s.substring(1,......))+ ......;

一部分。

我正在尝试使用一些if语句来编写一个函数,该函数将字符串作为参数,递归地 coutns它具有空白空格的数量。到目前为止我已经

public static int spaceCount (string s) {
    if ( ...... ) {
        return 0;
    }
    char c = s.charAt(0);
    if (....... ) {
        return spaceCount (.....);
    } else {
        return spaceCount(s.substring(1, ......)) + ......;
    }
}

所以在第一个if语句中,我应该写一个长度为零的字符串的情况吗?我很确定不会覆盖根本没有空格的情况,所以我不确定如何继续。

对于第二个和第三个,我知道我必须扫描字符串中的空格,但我不确定如何做到这一点。任何提示或方向将不胜感激!

4 个答案:

答案 0 :(得分:2)

public static int spaceCount(final String s) {

    if(s == null || s.length() == 0) {
        return 0;
    }

    char c = s.charAt(0);
    if(' ' != c) {
        return spaceCount(s.substring(1));
    } else {
        return spaceCount(s.substring(1)) + 1;
    }

}

您不必“扫描字符串中的空格”,这就是传递字符串其余部分的递归。

答案 1 :(得分:2)

s.length() - s.replaceAll(" ", "").length() returns you number of spaces.

how to count the spaces in a java string?有答案。可能它可能会有所帮助。上面这行是最简单的。

答案 2 :(得分:0)

[您没有指定编程语言]以下是Java中的解决方案:

public static int spaceCount(String s)
{ return scRecursive (s, s.length, 0, 0); }

public static int scRecursive (String s, int len, int dex, int count)
{ if (len == dex) return count;
  else
    return scRecursive (s, len, dex + 1,
                        (' ' == s.charAt(dex) ? count + 1 : count)); }

这是尾递归(这可能意味着一些效率),更重要的是,这不会复制/分配子串

这是Scheme中的一个:

(define (space-count string)
  (let ((length (string-length string)))
    (let stepping ((index 0) (count 0)
      (if (= index length)
          count
          (let ((char (string-ref string index)))
            (stepping (+ index 1)
                      (if (equal? #\space char)
                          (+ 1 count)
                          count)))))))

递归是在stepping的调用中,它有两个参数 - 当前索引和当前空格数。当索引等于长度时,递归终止。当前char为空格时,计数递增。

答案 3 :(得分:0)

public class CountSpaces {

    public static void main(String[] args) {
        String str = "     A   ";
        System.out.println(spaceCount(str, 0));
        System.out.println(spaceCount(str));
    }

    public static int spaceCount(String str, int count) {
        if (str == null) {
            return 0;
        } else if (str.length() > 0) {
            char c = str.charAt(0);
            if (Character.isWhitespace(c)) {
                count++;
            }
            return spaceCount(str.substring(1), count);
        } else {
            return count;
        }
    }

    public static int spaceCount(String s) {
        if (s.length() == 0 || s == null) {
            return 0;
        }
        char c = s.charAt(0);
        if (!Character.isWhitespace(c)) {
            return spaceCount(s.substring(1));
        } else {
            return spaceCount(s.substring(1, s.length())) + 1;
        }
    }
}