Découper un String avec la méthode split en Java

Les tableaux sont souvent utilisés dans les programmes informatique, on peut dire presque tous les programmes contiennent des tableaux de différents structures. la plus simple est le structure contiguë dont toutes les opérations sauf l'ajout se font séquentiellement. La suppression se fait avec un accès directe mais on doit faire le décalage des autres éléments.
Le comptage des mots dans une chaîne de caractère implique la recherche du caractère "espace". Java nous rend les choses plus facile et c'est là qu'on remarque l'avantage d'orienté objet, il existe une fonction prédéfinie split, diviser en français.

la méthode split prend en entrée une expression régulière. elle divise cette chaîne selon l'expression régulière donnée et elle retourne un tableau qui contient des sous chaines. Si l'expression ne correspond pas à la chaîne recherchée le tableau résultant n'a qu'un seul élément.


Si on veut diviser la chaîne suivante: Je.suis.un.programmeur séparée par des points, On doit écrire split("\\.") et non pas (split(".") faux ). Tout simplement parce qu'on a dit que la méthode split prend les expressions régulières en entrée. Si vous n'avez pas de connaissances, il suffit de chercher sur internet. Je vous donne le lien directement: 


Les expressions régulières en java avec regex

Dans notre exemple, nous n'avons pas besoin de grandes choses. Nous voulons compter le nombre de mots séparées par un "espace" dans une chaîne de caractères. Il existe deux façon pour réaliser ça:

1- avec la fonction split

La méthode split prend en entrée la chaîne à traiter et en sortie elle doit retourner le nombre de mots:

int nombremots(String chaine)

On déclare un tableau String[] mots; pour stocker les sous chaines. Cette dernière reçoit les sous chaines trouvées par split:

mots = chaine.split(" ");

Enfin, retourner la longueur du tableau mots:

return mots.length;

2- Sans la fonction split

Cette méthode parait plus longue mais elle n'est pas nécessaire puisque java a déja la fonction prédéfinie split. C'est un plus pour ceux qui veulent s’entraîner. 

On déclare un compteur de mots et un caractère.


int n=0;
char c;

Ensuite on lit tous les caractères de la chaîne et on teste si l'un d'eux est un espace sans compter les vides au début et à la fin de la phrase. Si oui incrémenter le compteur.


for(int i = 0 ; i < chaine.length() ; i++){
    c = chaine.charAt(i);
    if(i!=0 && i!=chaine.length()-1)
       if(c==' ')
  n++;
}

Enfin, le compteur est égale 0 si la chaîne en entrée est vide et égale à 1 si l'expression ne correspond pas à la chaîne recherchée.

S'il est supérieur à 1 ça veut dire qu'il y a au moins un espace.

if(n>1)
  n++;

Exemple

" je suis un programmeur "
On ajoute 1 parce qu'on compter les espaces entre les mots( entre chaque deux mots un espace).

public class NombreMotsChaine {

//avec la fonction prédéfinie split
static int nombremots(String chaine){
int n=0;
String[] mots;
//split divise la chaine en un ensemble de mots
//s'il y a un espace et les mis dans un tableau
mots = chaine.split(" ");
return mots.length;
}

//sans la fonction prédéfinie split
static int nombremots_naive(String chaine){
int n=0;
char c;
//parcourir toute la chaine
for(int i = 0 ; i < chaine.length() ; i++){
//caractère par caractère
c = chaine.charAt(i);
//Eviter de compter les espaces
//au début et à la fin
//exemple: " je suis un programmeur "
//si on enlève ce test, le nombre de mots
//sera 6 bien qu'on a 4 mots.
if(i!=0 && i!=chaine.length()-1)
if(c==' ')
n++;
}
//si la chaîne n'est pas vide
//on ajoute 1 parce qu'on
//compter les espaces entre
//les mots càd si on a 3 espaces
//alors on aura 4 mots
if(n>1)
n++;
return n;
}

public static void main(String[] args) {
String chaine=" je suis un programmeur";
System.out.println(nombremots_naive(chaine));
}
}