如何计算字符串中的元音?

时间:2014-11-20 05:47:35

标签: java string count

目标是计算用户输入的短语中有多少元音。 用户将输入一个

的短语
my name is nic

此示例的输出是

Vowel Count: 4

现在这是我的代码。

    import cs1.Keyboard;
public class VowelCount {

    public static void main(String[] args) {
        System.out.println("Please enter in a sentence.");
            String phrase = Keyboard.readString();
            char[] phraseArray = phrase.toCharArray();
            char[] vowels = new char[4];
            vowels[0] = 'a';
            vowels[1] = 'e';
            vowels[2] = 'i';
            vowels[3] = 'o';
            vowels[4] = 'u';
            int vCount = countVowel(phrase, phraseArray, vowels);
            System.out.println("Vowel Count: " + vCount);
    }

    public static int countVowel(String word, char[] pArray, char[] v) {
        int vowelCount = 0;
        for (int i = 0; i < word.length(); i++) {
            if (v[i] == pArray[i])
                vowelCount++;
        }
        return vowelCount;
    }
}

使用我的代码我得到一个ArrayIndex错误。我知道修复但是当我改变

for (int i = 0; i < word.length(); i++) {

for (int i = 0; i < 5; i++) {

它修复了错误但不计算元音。它输出

Vowel Count: 0

那么我该如何解决这个问题呢?有没有比我尝试这样做更好的方法呢?

2 个答案:

答案 0 :(得分:5)

只需使用正则表达式。会为你节省很多时间

int count = word.replaceAll("[^aeiouAEIOU]","").length();

答案 1 :(得分:3)

您正试图以四个元音阵列存储五个元音;

char[] vowels = new char[5]; // not 4.
vowels[0] = 'a'; // 1
vowels[1] = 'e'; // 2
vowels[2] = 'i'; // 3
vowels[3] = 'o'; // 4
vowels[4] = 'u'; // 5

或者,

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

此外,请不要忘记致电toLowerCase(),否则您只会计算小写元音。

最后,您应该循环遍历pArray和每个vowel中的每个字符。我会使用两个for-each loops之类的

for (char ch : pArray) {
  for (vowel : v) {
    if (ch == v) vowelCount++;
  }
}