Utilizzare i metodi stringa per trovare e contare le vocali in una stringa?

Ho questo problema per i compiti (sono onesto, non sto cercando di nasconderlo almeno) e sto avendo problemi a capire come farlo.

Date le seguenti dichiarazioni: String phrase = “WazzUp? – Who’s On FIRST ??? – IDUNNO”; Scrivi il codice necessario per contare il numero di vocali nella stringa e stampare il messaggio appropriato sullo schermo.

Ecco il codice che ho finora:

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); 

Tuttavia, quando lo eseguo, crea solo un mucchio di righe vuote. Qualcuno può aiutare?

phrase.substring(i, i++); dovrebbe essere phrase.substring(i, i + 1); .

i++ fornisce il valore di i e quindi aggiunge 1 ad esso. Come avete ora, String j è efficace phrase.substring(i, i); , che è sempre la stringa vuota.

Non è necessario modificare il valore di i nel corpo del ciclo for poiché è già incrementato in for (i = 0; i < length; i++) .

Questo potrebbe / dovrebbe essere un one-liner

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

e i suoi solo metodi String

Non vedo la necessità di avere una dichiarazione di stampa nel ciclo.

 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 } } 

Converte la stringa in lettere minuscole e controlla tutti i caratteri nella stringa per le vocali.

Migliorando su una risposta sopra per considerare le vocali in maiuscole:

 System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length()); 

L’incremento di i ++ dopo è stato utilizzato, quindi stai essenzialmente dicendo string.substring (i, i). Poiché il contrassegno finale è esclusivo, restituirà sempre una stringa vuota. Una soluzione semplice sarebbe semplicemente cambiarlo

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

Spero possa aiutare!

Utilizzo delle raccolte:

  String word = "busiunesuse"; char[] wordchar= word.toCharArray(); Character allvowes[] ={'a','e','i','o','u'}; Map mymap = new HashMap(); for(Character ch: wordchar) { for(Character vowels : allvowes) { if(vowels.equals(ch)) { if(mymap.get(ch)== null) { mymap.put(ch, 1); } else { int val = mymap.get(ch); mymap.put(ch, ++val); } } } } Set  myset = mymap.keySet(); Iterator myitr = myset.iterator(); while(myitr.hasNext()) { Character key = (Character) myitr.next(); int value = mymap.get(key); System.out.println("word:"+key+"repetiotions:"+value); } } 

}

So che è una vecchia modifica, ma penso che sia meglio se si utilizza e matrice per le vocali:

 public static void main(String[] args) { String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO".toLowerCase(); int vowels = 0; String[] array = {"a", "e", "i", "o", "u"}; for (int i = 0; i < phrase.length(); i++) { String j = phrase.substring(i, i + 1); System.out.println(j); for (int n = 0; n < array.length; n++) { if (j.equals(array[n])) { vowels++; } } } System.out.println("Number of vowels: " + vowels); } 

Contare il numero di vocali in una stringa:

 class Test { static int a; public static String countVowel(String strName) { char ch[] = strName.toCharArray(); for(int i=0; i 

public class 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