我需要计算元音,但这总是返回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;
}
答案 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();
}