Nombre de majuscules et minuscules dans un string en Java

Cet article montre comment compter le nombre d'instances des lettres majuscules et minuscules dans une chaîne de caractères en codant notre programme ou avec java 8 et l'api de guava de google.

isUpperCase() et isLowerCase() en Java

Cette méthode consiste à parcourir les caractères de la phrase et voir pour chacun s'il est minuscule ou majuscule. On doit créer un compteur de majuscules et un autre pour les minuscules. A la fin, on affiche les valeurs des deux variables.

Pour vérifier si le caractère est minuscule ou majuscule, java contient deux méthodes:
boolean isUpperCase(char ch): cette méthode retourne true si le caractère est un majuscule. Un caractère est un majuscule si sa catégorie retournée par Character.getType(ch) est UPPERCASE_LETTER.
boolean isLowerCase(char ch): cette méthode retourne true si le caractère est un minuscule. Un caractère est un minuscule si sa catégorie retournée par Character.getType(ch) est LOWERCASE_LETTER.

public class nombre_majuscule_minuscule {

public static void main(String[] args) {

String chaine="Le langage Java est langage de programmation"+
"orienté objet créé par Sun Microsystems";

int nbr_min = nbr_min(chaine);
int nbr_maj = nbr_maj(chaine);

System.out.println("nombre de minuscules "+nbr_min);
System.out.println("nombre de majuscules "+nbr_maj);

}

private static int nbr_maj(String chaine) {
int compteur=0;
for(int i = 0; i<chaine.length(); i++){
char ch = chaine.charAt(i);
if(Character.isLowerCase(ch))
compteur++;
}
return compteur;
}

private static int nbr_min(String chaine) {
int compteur=0;
for(int i = 0; i<chaine.length(); i++){
char ch = chaine.charAt(i);
if(Character.isUpperCase(ch))
compteur++;
}
return compteur;
}
}
L'exécution de ce code:

nombre de minuscules 4
nombre de majuscules 68

On peut créer la version récursif des deux méthodes nbr_min() et nbr_maj(). Cette fois-ci on a décidé de programmer nous même les deux méthodes fournit pas java isUpperCase() et isLowerCase(), en basant sur la plage des codes ASCII de l'alphabet minuscule et majuscule.

private static int nbr_maj_recursive(String chaine, int i) {
/*si i atteint la taille de la chaine
* on retourne 0
*/
if(chaine.length()-i==0)
return 0;
/*sinon on vérifie le prochain caractère*/
else{
char ch = chaine.charAt(i);
if(estMajuscule(ch))
/*on incrémente i et on compte une
*lettre majuscule*/
return nbr_maj(chaine, ++i)+1;
}
return nbr_maj(chaine, ++i);
}
La déclaration de la méthode nbr_min_recursive() change seulement au niveau de la vérification de type de caractère qui se fait avec la méthode estMinuscule().

private static int nbr_min_recursive(String chaine, int i) {
if(chaine.length()-i==0)
return 0;
else{
char ch = chaine.charAt(i);
if(estMinuscule(ch))
return nbr_min(chaine, ++i)+1;
}
return nbr_min(chaine, ++i);
}
La méthode estMajuscule() est équivalente à la méthode isUpperCase().

static boolean estMajuscule(char ch){
int ascii = (int) ch;
//[A..Z]
if((ascii>=65 && ascii<=90)
//les lettres accentuées
|| (ascii>=192 && ascii<=223))
return true;
return false;
}
La méthode estMinuscule() est équivalente à la méthode isLowerCase().

static boolean estMinuscule(char ch){
int ascii = (int) ch;
//[a..z]
if((ascii>=97 && ascii<=122)
//les lettres accentuées
|| (ascii>=224 && ascii<=255))
return true;
return false;
}

Java 8

Avec Java 8, on peut calculer le nombre des lettres majuscules et minuscules. On va appeler la méthode chars() qui va retourner un IntStream et à partir de là on va filtrer les lettres majuscules et minuscules en passant un filtre. A la fin, on va utiliser l'opération count() pour trouver le nombre d'instances.

public void compter_majuscules_java8() {

String phrase = "Ceci est Un Test";

long compteur = phrase.chars().filter(Character::isUpperCase).count();
}
Et pour compter les minuscules, faites ceci:

public void compter_minuscules_java8() {

String phrase = "Ceci est Un Test";

long compteur = phrase.chars().filter(Character::isLowerCase).count();
}

Google Guava

L'API Guava est utilisée aussi pour déterminer le nombre total des lettres majuscules et minuscules dans un String. Vous pouvez considérer ChartMatcher comme un ensemble de caractères, alors quand on utilise ChartMatcher.JAVAUPPERCASE ça veut dire n'importe quelle lettre majuscule. La méthode rainFrom() va supprimer tous les caractères qui ne sont pas majuscules.


public void compter_majuscules_java8() {

String phrase = "Ceci est Un Test";

long compteur = CharMatcher.JAVA_UPPER_CASE.retainFrom(phrase).length();
}
Et pour compter les minuscules, faite ceci:

public void compter_minuscules_java8() {

String phrase = "Ceci est Un Test";

long compteur = CharMatcher.JAVA_LOWER_CASE.retainFrom(phrase).length();
}