使用递归从字符串中提取元音?

时间:2015-09-27 21:25:17

标签: java

不确定此代码是否有效?或者是否有其他方式以更简单的方式编写它?

public static String extractVowels(String s, StringBuilder x, int i){
    if(i < s.length()){
      if(s.charAt(i)== 'a' || s.charAt(i)== 'e' || s.charAt(i)== 'i' || 
         s.charAt(i)== 'i' || s.charAt(i)== 'o' || s.charAt(i)== 'u'){
        x = new StringBuilder(s);
        return extractVowels(s,x.deleteCharAt(i), i+1);
      }
    }
    return null;
  }

1 个答案:

答案 0 :(得分:2)

假设您正在将此作为练习递归的学习练习,您需要考虑以下内容:

  • 让您的方法返回结果,而不是将其附加到StringBuilder
  • 从空字符串中删除元音会产生空字符串
  • 从以元音开头的字符串中删除元音与从删除第一个字符的子字符串中删除元音相同
  • 从不以元音开头的字符串中删除元音是第一个字符,后跟从剩余子字符串中删除元音的结果。

英文描述比Java代码长很多:

public static String extractVowels(String s) {
    if (s.length() == 0) {
        return s;
    }
    char c = s.charAt(0);
    if (c == 'a' || c == 'e' || ...) {
        return extractVowels(s.substring(1));
    } else {
        return c+extractVowels(s.substring(1));
    }
}