Mise en majuscule ds 1ere letr d'1 JTextField

Résolu
coolanso Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
 
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