为什么要计算元音?

时间:2019-04-03 03:06:25

标签: java count

我需要计算元音,但这总是返回0?

public static int numVowel(String s) {
  int count = 0,x;
  for(x = 0; x<s.length();x++)
    if (x=='a' || x=='e' || x=='i' || x=='o' || x=='u' || x=='A' || x=='E' || x=='I' || x=='O' || x=='U')
    count++;
  return count;
}

4 个答案:

答案 0 :(得分:0)

您正在将计数器/索引与char文字进行比较。

相反,您应该针对这些文字在索引位置检索字符!有关操作方法,请参见此处的Get string character by index - Java

答案 1 :(得分:0)

应为s.charAt(x) == 'a',而不是x == 'a'。 您应该检查给定索引处的字符。

答案 2 :(得分:0)

您不想检查x的值;您要检查位置x处字符的值。您可以使用s.charAt(x)来做到这一点。

答案 3 :(得分:0)

因为x是您的索引(不是s中的字符)。另外,请始终使用花括号(即使它们是可选的)。要使用您当前的方法解决此问题,请执行类似的操作

public static int numVowel(String s) {
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
        char x = s.charAt(i);
        if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' || x == 'E' || x == 'I' || x == 'O'
                || x == 'U') {
            count++;
        }
    }
    return count;
}

但是我更喜欢类似的东西

public static int numVowel(String s) {
    int count = 0;
    for (char ch : s.toLowerCase().toCharArray()) {
        if ("aeiou".indexOf(ch) > -1) {
            count++;
        }
    }
    return count;
}

或者使用正则表达式从输入String中删除不是元音的所有内容,然后返回其长度。喜欢,

public static int numVowel(String s) {
    return s.toLowerCase().replaceAll("[^aeiou]", "").length();
}

如果您需要多次调用它,那么调用String.toLowerCase()的代价并不小;并且您可以将该正则表达式编译为Pattern

private static Pattern _PATTERN = Pattern.compile("[^aeiouAEIOU]");
public static int numVowel(String s) {
    return _PATTERN.matcher(s).replaceAll("").length();
}