web-dev-qa-db-fra.com

Utiliser des méthodes de chaîne pour trouver et compter les voyelles dans une chaîne?

J'ai ce problème pour faire mes devoirs (je suis honnête, je n'essaye pas de le cacher au moins) Et j'ai du mal à comprendre comment le faire.

Compte tenu des déclarations suivantes: String phrase = "WazzUp? - Qui est sur FIRST ??? - IDUNNO"; Écrivez le code nécessaire pour Comptez le nombre de voyelles de la chaîne et affichez le message approprié à l'écran.

Voici le code que j'ai jusqu'à présent:

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

Cependant, lorsque je l'exécute, cela crée tout un tas de lignes vides. Quelqu'un peut-il aider?

8
xSpartanCx

phrase.substring(i, i++); devrait être phrase.substring(i, i + 1);.

i++ donne la valeur de i et y ajoute ensuite 1. Comme vous l'avez maintenant, String j est effectivement phrase.substring(i, i);, qui est toujours la chaîne vide.

Vous n'avez pas besoin de changer la valeur de i dans le corps de la boucle for car elle est déjà incrémentée dans for (i = 0; i < length; i++).

8
irrelephant

Je ne vois pas la nécessité d'avoir une déclaration d'impression dans la boucle.

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

Cela convertit la chaîne en minuscule et vérifie tous les caractères de la chaîne pour les voyelles.

8
Whymarrh

Cela pourrait/devrait être un one-liner

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

et ses méthodes String only

8
Master Slave

Améliorer la réponse ci-dessus pour considérer les voyelles en majuscules:

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

Les incréments i ++ i après que a été utilisé, vous dites donc essentiellement string.substring (i, i). Puisque la marque de fin est exclusive, cela retournera toujours une chaîne vide. Une solution facile serait simplement de le changer en

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

J'espère que cela pourra aider!

0
awolfe91

Pour Compter le nombre de voyelles dans une chaîne:

class Test {  

      static int a;

      public static String countVowel(String strName) { 

          char ch[] = strName.toCharArray();


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

            switch(ch[i]) {

            case 'a':

             a++;   

            break;      

            case 'e':
                a++;    

                break;

            case 'i':
                 a++;   

                break;

            case 'o':
                 a++;   

                break;

            case 'u':
                 a++;   

                break;

            }

          }

          strName = String.valueOf(a);

          return strName;       
      } 

      public static void main(String[] args) {  

        Scanner s = new Scanner(System.in);
        System.out.print(countVowel(s.nextLine())); 
     }   

  } 
0
Stephen

Utiliser des collections:

     String Word = "busiunesuse";
     char[] wordchar= Word.toCharArray();
     Character allvowes[] ={'a','e','i','o','u'};
     Map<Character, Integer> 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 <Character> 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);


     }


}

}

0
Kim Kam

Je sais que c'est un vieux montage, Mais je pense que c'est mieux si vous utilisez un tableau pour les voyelles:

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);
}
0
M.achaibou