2012-12-05 9 views
7

私は宿題についてこの問題があります(私は正直で、少なくともそれを隠そうとしていません) そして、私はそれをどうやって解決するかを考えています。文字列メソッドを使用して、文字列内の母音を見つけて数えますか?

次のような宣言があります。String phrase = "WazzUp? - Who's On First? - IDUNNO"; に必要なコードを書き込んで、文字列中の母音の数を数え、画面に適切なメッセージを表示します。私はそれはそれだけで空白行の束を作る実行すると、しかし

String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO"; 
int i, length, vowels = 0; 
String j; 
length = phrase.length(); 
for (i = 0; i < length; i++) 
{ 

    j = phrase.substring(i, i++); 
    System.out.println(j); 

    if (j.equalsIgnoreCase("a") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("e") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("i") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("o") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("u") == true) 
    vowels++; 

} 
System.out.println("Number of vowels: " + vowels); 

は、ここで私がこれまで持っているコードです。誰も助けることができますか?

+3

'String.charこの場合、 '()'は 'String.substring()'より簡単です。 – NullUserException

+1

switch文のように思えますが、ここで実装できます。スイッチの代わりに –

+0

を使用すると、母音のリストを作成してlist.contains(j) – Gaskoin

答えて

8

phrase.substring(i, i++);は、phrase.substring(i, i + 1);である必要があります。

i++の値はiとなり、1が加算されます。現時点では、String jは実質的にphrase.substring(i, i);です。これは常に空文字列です。

forループの本体でiの値を変更する必要はありません。すでにfor (i = 0; i < length; i++)で増分されているためです。

+0

のように表示するかどうかを確認するのが良いでしょう。私は最後の増分が必要だとは思わない。 – Wes

+0

@Wesあなたが正しいです。ありがとう。 – irrelephant

+0

うわー、ありがとう! – xSpartanCx

0

i ++はisが使用された後にiを増やすので、本質的にstring.substring(i、i)と言っています。終了マークは排他的なので、常に空の文字列を返します。簡単に修正できるのは、

j = phrase.substring(i, ++i); 

希望するものがあります。

+0

私は、プレフィックスまたはポストフィックスのいずれかのインクリメント演算子が必要であるとは思わない。しかし、それはプレフィックスと後置演算子が何をするかを知るのに便利です。 – Wes

8

私はループ内でprintステートメントを持つ必要はありません。

String s = "Whatever you want it to be.".toLowerCase(); 
int vowelCount = 0; 
for (int i = 0, i < s.length(); ++i) { 
    switch(s.charAt(i)) { 
     case 'a': 
     case 'e': 
     case 'i': 
     case 'o': 
     case 'u': 
      vowelCount++; 
      break; 
     default: 
      // do nothing 
    } 
} 

これは、文字列を小文字に変換し、母音の文字列内のすべての文字をチェックします。

+5

なぜ新しい恋人のケースを作成する各ループの繰り返しで文字列ですか? beforeループを作成する方がより効果的なIMHOになります。 – Pshemo

+0

良い点。更新しました。 – Whymarrh

+0

'.toLowercase()'が間違っています。toLowerCase() ' – MortalMan

-1

パブリッククラスJavaApplication2 {

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException { 
    // TODO code application logic here 
    System.out.println("Enter some text"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String input = br.readLine().toLowerCase(); 

    char[] vowel = new char[]{'a', 'e', 'i', 'o', 'u'}; 
    int[] countVowel = new int[5]; 
    for (int j = 0; j < input.length(); j++) { 
     char c =input.charAt(j); 
     if(c=='a') 
      countVowel[0]++; 
     else if(c=='e') 
      countVowel[1]++; 
     else if(c=='i') 
      countVowel[2]++; 
     else if(c=='o') 
      countVowel[3]++; 
     else if(c=='u') 
      countVowel[4]++; 


    } 
    for (int i = 0; i <countVowel.length; i++) { 
      System.out.println("Count of vowel " + vowel[i] + "=" + countVowel[i]); 
     } 

    } 
} 
7

これは/

System.out.println("the count of all vowels: " + (phrase.length() - phrase.replaceAll("a|e|i|o|u", "").length())); 

し、その文字列のメソッドのみ

2

キャップに母音を検討するために、上記の回答に改善ワンライナーでなければなりませんでした:

System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length()); 
関連する問題