2014-11-20 4 views
-2

Цель состоит в том, чтобы подсчитать, сколько гласных есть во фразе, которую вводит пользователь. Пользователь будет ввести фразу, которая будетКак считать гласные в строке?

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 

Так как я могу решить эту проблему, и есть лучший способ сделать это, чем то, как я пытаюсь сделать это?

ответ

5

Просто используйте регулярное выражение. сэкономит ваше время

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

- это «^», предположительно, чтобы быть там? –

+2

@NicLaQuatra Да. символ '^' означает ''not'' – Baby

+0

Sweet! Также есть ли что-нибудь, что можно пойти между пустым ""? Означает ли это что-нибудь? –

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++; 
    } 
} 
+0

Вся ваша информация очень полезна, за исключением последней части с циклом for. Я не научился для каждого цикла, но lol –

Смежные вопросы