返回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语句中,我应该写一个长度为零的字符串的情况吗?我很确定不会覆盖根本没有空格的情况,所以我不确定如何继续。
对于第二个和第三个,我知道我必须扫描字符串中的空格,但我不确定如何做到这一点。任何提示或方向将不胜感激!
答案 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;
}
}
}