Mise en majuscule ds 1ere letr d'1 JTextField

Résolu/Fermé
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014 - 6 déc. 2011 à 15:15
 Utilisateur anonyme - 7 déc. 2011 à 03:36
Bonjour à tous, j'ai un JTextField qui doit contenir le prénom de l'utilisateur, il se trouve qu'un utilisateur peut avoir plusieurs prénoms, je voudrais que mon code mette toutes les premières lettres du prénom en majuscules.mon code le fait, mais pas correctement, dés que l'espace entre les prénoms atteint 2 caractères y'a problème. Comment pourrais-je l'améliorer ?
Voici mon code :

private void TxtPrenomEnfantFocusLost(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
String[] tab= getTxtPrenomEnfant().trim().split(" ");/*Nombre de prénom(s) en rapport avec l'espace entre eux, si cet espace = 1 pas de problème, mais dès qu'il en est supérieur y'a problème*/
String result=" " ;
for(int i=0;i<tab.length;i++){
String leTout=tab[i].substring(1);
String prem=tab[i].substring(0,1).toUpperCase();
result+= prem.concat(leTout).concat(" ");
}
TxtPrenomEnfant.setText(result );
}
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 déc. 2011 à 15:27
trim() enlève les espaces, donc split(" ") n'a plus de sens.

Voici une manière propre de faire (utiliser StringBuilder évite de recréer plein d'objets String comme tu fais avec les += et les concat)

public static String maj(String s)
{
	String[] tab = s.split("\\s");
	StringBuilder sb = new StringBuilder();
	
	for (int i=0, n=tab.length; i<n; i++)
	{
		sb.append(tab[i].substring(0,1).toUpperCase(Locale.FRANCE));
		sb.append(tab[i].substring(1).toLowerCase(Locale.FRANCE));
		if (i!=n-1)
			sb.append(" ");
	}
	
	return sb.toString();
}

System.out.println(maj("naPOLéoN boNapARte")); // Napoléon Bonaparte
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 déc. 2011 à 15:44
Remarque : je n'ai pas vraiment répondu à ta question avec mon code.
S'il y a plusieurs espaces entre deux noms il faut plutôt considérer split("\\s+") au lieu de split("\\s")
0
Utilisateur anonyme
7 déc. 2011 à 03:36
Salut,

Un petit détail KX:
"trim() enlève les espaces, donc split(" ") n'a plus de sens."

trim() enlève seulement les espaces possibles en début et en fin de l'objet String.

      	//Dans ce petit code il n'est pas vérifié qu'à partir de la seconde lettre il n'y a que des minuscules.
      		
         String jtfPrenom = "   pierre     paul Jacques   ";
         jtfPrenom = jtfPrenom.trim(); // pour supprimer les espaces possibles en début ou fin
         System.out.println("jtfPrenom = " + jtfPrenom);
      
      
         String[] prenoms = jtfPrenom.split(" +");
         for(int i = 0; i < prenoms.length; i++)
         {
            //System.out.println("Pénom " + (i+1) + ": " + prenoms[i]);
            String premLettre = prenoms[i].substring(0,1).toUpperCase();
            //System.out.println("premLettre = " + premLettre);
            String prenomNew = premLettre + prenoms[i].substring(1);
            //System.out.println("Prenom new " + (i+1) + ": " + prenomNew);
            prenoms[i] = prenomNew;
         }
         
      	// Le résultat:
         for(int i = 0; i < prenoms.length; i++)
         {
            System.out.println("Pénom new " + (i+1) + ": " + prenoms[i]);
         }
0