Java-mettre la première lettre en majuscules [Résolu/Fermé]

Signaler
Messages postés
57
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
29 novembre 2009
-
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
-
Bonjour,
Je souhaiterai faire un programme java (sous eclipse) qui met la première lettre d'un mot composé en majuscule.
Par exemple : en entrée : la la
sortie: La La

Je ne sais pas comment m'y prendre pour le deuxième mot.
Merci d'avance.

Cordialement.
popo15

8 réponses


Salut,

J'ai justement un petit code que j'ai légèrement modifié pour faire çà.
Je le poste même si c'est résolu...

// AVEC SPLIT ET REGEX
      
      // test avec une des "chaine1" ci-dessous
         //String chaine1 = "la          la";
         //String chaine1 = "ba be bi bo bu";
         //String chaine1 = "1er   la,       2eme la";
         String chaine1 = "1234 5678 abc";
         System.out.println("");
      	
         String chaine2 = "";
         
         // compilation de la regex
         Pattern patern = Pattern.compile(" ");    //(" "); // le séparateur est un espace
         // éclatement en sous-chaînes
         String[] sousChaines = patern.split(chaine1);
         for(int i = 0; i < sousChaines.length; i++)
         {
            {
               if(!sousChaines[i].equals(""))
               {
                  String ch2 = sousChaines[i].substring(0, 1);
                  ch2 = ch2.toUpperCase();
                  ch2+= sousChaines[i].substring(1) + " "; // on ajoute 1 espace entre les 2 sous-chaines
                                                           // mais aussi apres la derniere ***
                  chaine2+= ch2;
               }  
            }
         }
         System.out.println("chaine1 = \"" + chaine1 + "\"");
         chaine2 = chaine2.trim(); // *** suppression de l'espace final
         System.out.println("chaine2 = \"" + chaine2 + "\"\n");
         
         //Ou bien
         System.out.println("chaine1 avant = \"" + chaine1 + "\"");
         chaine2 = chaine2.trim(); // *** suppression de l'espace final
         chaine1 = chaine2;
         System.out.println("chaine1 apres = \"" + chaine1 + "\"");


Ce code peut ètre amélioré!...

Cordialement,

Dan
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
633
il faut que tu cherches dans ta chaine les espaces, et tu sais qu'après un espace tu mets la lettre en majuscule. tout ça en boucle.
Messages postés
57
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
29 novembre 2009

Je mets :


String motComposé;
while(i<=motComposé.lenght())
{
char c=motComposé.charAt(i);
if(c==' ')
.......

Je vois pas du tout en faites. Peut tu m'aider un peu plus ?
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
633
1) i<=motComposé.lenght() est une mauvaise idée, plutôt " < " que "<=" si tu ne veux pas avoir d'erreur à la fin.

2)utilises une variable booléenne comme "drapeau" pour dire s'il faut mettre en maj ou pas :
String motCompose;

boolean mettreEnMaj = true; 
// faut le mettre à true au départ car la première lettre sera de toutes façon mise en majuscules

char c;
while(i<motCompose.length())
{
  c=motCompose.charAt(i);
  //si le drapeau "mettreEnMaj" vaut vrai, il faut rendre la lettre courante majuscule.
  if (mettreEnMaj) {
    //ici le code qui met la lettre courante en majuscules si c'est une lettre
    // (ne rien faire si ce n'est pas une lettre)
  }

  
  if(c==' ') {
    mettreEnMaj = true;
  } else {
    mettreEnMaj = false;
  }
}



PS et EDIT : Bien sûr il y a des choses inutiles dans mon algorithme, notamment dans le cas où il y a plusieurs espaces à la suite. Mais ce n'est pas bien grave et ça devrait fonctionner.
Messages postés
57
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
29 novembre 2009

Je comprend ce que tu as écrit mais je suis incappable d'écrire le code dans le if, car moi je mettrai c=c.toUpperCase(), ce qui est impossible vu les types
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
633
oui c'est vrai. ça va avoir l'air un peu compliqué.

D'ailleurs je viens de penser à un truc : de toutes façons il te faut recréer la liste de départ car les String sont constantes en Java.

Une possibilité est de traduire cette string par un tableau de char (un char [] ) grace à la méthode toCharArray() de ta String de départ.

On va boucler sur les éléments de ton char [] , qu'on pourra modifier.

Ensuite on peut recréer une string à partir de ce char[] grace à un des constructeurs de String.


Pour la boucle :
Ensuite, chaque caractère tu le prends donc du tableau.
Pour le code de mise en majuscule :
Si c'est une lettre (de valeur plus grande ou égale à 'a' mais plus petite ou égale à 'z') et que "mettreEnMaj" est vrai comme avant, alors tu crées une string à partir de ce caractère. (String s = new String(c) ). Ensuite string s2 = s.toUpperCase; fait que s2 contient maintenant une lettre majuscule. Tu n'as qu'à remplacer le ième élément de ton tableau par s2.charAt(0).


sinon, tu fais comme avant la vérification : si c est un espace alors mettre le drapeau à true.
Messages postés
57
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
29 novembre 2009

Ok compris. Merci bien pour tes explication.

Bonne soirée.
Cordialement.
popo15
description.replaceFirst(".",(description.charAt(0)+"").toUpperCase())
Messages postés
27
Date d'inscription
samedi 31 décembre 2011
Statut
Membre
Dernière intervention
8 février 2014

bonsoir je veux ecirire un programme java capable de reconnaitre les mots composés d'un texte donné. En fait il faut faire une comparaison entre ce texte et un glossaire donné. quelqu'un peut m'aider?? Merci
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
633
postez un nouveau sujet, la question n'est pas la même qu'ici