Salut a toutes & tous
J'aimerais écrire un programme qui capitalise la première de chaque mot dans une phrase
Merci!
Version imprimable
Salut a toutes & tous
J'aimerais écrire un programme qui capitalise la première de chaque mot dans une phrase
Merci!
Salut,
Pour mettre en majuscule chaque première lettre d'un mot, il faut trouver ces lettres dans la chaîne.
- Soit on parcourt la chaîne et on cherche une caractéristique qui détermine que la lettre est la première d'un mot. La caractéristique en question est, en français, en version simple : si le caractère n'est pas précédée par une lettre, alors c'est la première d'un mot. On peut aussi simplifier en cherchant les caractères qui sont précédés par une espace.
- Soit on utilise une expression régulière qui détecte chaque première lettre de chaque mot.
- Soit on découpe la chaîne en mots, on parcourt les mots puis on reconstruit la chaîne, mais ça peut compliquer les choses si on souhaite respecter les espacements entre mot, parce que le découpage simple (par split()) ne conserve pas les séparateurs. On peut utiliser un StringTokenizer éventuellement
Il faudra tenir compte du cas particulier du premier caractère de la String, qui n'est pas précédé de quoique ce soit. Et éventuellement de tous les cas particuliers en fonction de comment on veut les traiter (cas de l'apostrophe, lettre après . dans un acronyme, etc).
Je penche pour une approche 1 de joel.drigo mais à l'inverse de ce qu'il suggère. En effet, il est certainement plus simple de choisir la liste des caractères qui engendre une mise en majuscule que de chercher ce qui caractérise un mot.
Dans ce cas, on parcours la chaîne de caractères de la gauche vers la droite et si on détecte un de ces caractères, alors le suivant devra être mis en majuscule et ceci jusqu'au dernier caractère de la chaîne.
Si on ne prennait en compte que {" ", "'", "-", ".", ":", ";", ",", "?", "!", "\t", "\n" , "\r'"}, on serait déjà assez proche du résultat escompté...
(J'ai ajouté les caractères de ponctuation parce que si la phrase n'est pas dans la logique française qui veut qu'on mette un blanc derrière, les omettre pourrait poser problème...)