2012-12-05 96 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 ++使用後增加i,所以你基本上是說string.substring(i,i)。由於結束標記是獨佔的,這將始終返回一個空字符串。一個簡單的辦法是隻將其更改爲

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

希望幫助!

+0

我不認爲需要有一個增量操作符前綴或後綴。但是,它有用於瞭解前綴和後綴運算符的作用。 – Wes

8

我看不到在循環中需要打印語句。

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

爲什麼在每個循環迭代中創建新的情人案例字符串?在循環之前創建一個會更有效。 – 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());