56 votes

Comment capitaliser les noms

Donc, fondamentalement, si je veux transformer un nom de

 stephen smith 
 

à

 Stephen Smith
 

Je peux facilement le faire avec Come CSS sur la page, mais dans l’idéal, j’aimerais le saisir plus tôt et le modifier lorsqu’il sort de la base de données. comment puis-je obtenir csharp pour captialiser une chaîne.

y a-t-il une fonction pour cela?

74voto

Dexter Points 7001

Vous pouvez le faire en utilisant la méthode ToTitleCase de la classe System.Globalization.TextInfo :

 CultureInfo cultureInfo   = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;

Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));
 

29voto

Marc Gravell Points 482669

Les noms sont difficiles. Les règles simples des premières lettres ne s'appliquent pas . La seule approche des sénateurs consiste à demander à vos utilisateurs comment ils le souhaitent. Tout le reste peut offenser.

Si je m'appelle MacPhearson, ODowel ou tout simplement Marc, Marc ou même Marc - alors, franchement: laissez-le tranquille. Faites confiance à l'utilisateur pour bien faire les choses. Cela devient encore plus délicat lorsque vous passez d'une culture à l'autre.

4voto

PedroC88 Points 1217

Espérons que cela aide :)... Mais notez que le processus sera probablement lent si vous avez beaucoup, beaucoup de cordes à modifier la casse...

    string str = "to title case";
    Char[] ca = str.ToCharArray();

    foreach(Match m in Regex.Matches(str, @"\b[a-z]"))
    {
        ca[m.Index] = Char.ToUpper(ca[m.Index]);
    }
    Console.WriteLine(new string(ca));

Mise à jour: Ou vous pouvez également utiliser un évaluateur pour modifier la casse comme ceci:

    string str = "to title case";
    Console.WriteLine(Regex.Replace(str, @"\b[a-z]", delegate (Match m) 
                                                  {
                                                      return m.Value.ToUpper();
                                                  }
                      ));

Notez que dans mon test avec 1 000 000 d'itérations de la première méthode a été seulement 0.48 secondes plus rapide que l'un avec l'évaluateur (La première a eu 6.88 secondes et le dernier 7.36 secondes pour compléter le 1 000 000 d'itérations) je ne voudrais pas prendre de la vitesse en compte pour choisir...

2voto

Ondrej Tucny Points 13127

Non, il n'y en a pas. Fournir vous connaissez la chaîne de traitement est un nom (ou, pour mieux dire, une séquence de l'humain, de noms séparés par des espaces), vous devez être en mesure de coder vous-même dans un délai d'un for cycle et à l'aide de Char.ToUpper. Cependant, il y a une culture spécifique des cas comme arabique mots "bin", "al", etc. utilisés dans les noms, qui ne sont pas capitalisés (fournir une transcription latine est utilisé). La même chose vaut pour "von" ou "van" dans les langues occidentales.

Mise à jour: Veuillez noter que l' TextInfo.ToTitleCase sert un but différent - il n'est pas conçue pour tirer parti des premières lettres des noms, mais à fournir une enveloppe de titres (comme les titres d'articles de presse pour être clair).

Bien que l'application actuelle en .NET peut facilement servir l'a demandé, j'aimerais éviter de le faire. La raison en est la mise en œuvre peut changer de façon significative dans l'avenir, et donc il est plus sûr de faire une implémentation personnalisée de l'homme de tous les noms. En outre, je doute que la méthode est vraiment utilisable pour le titre-boîtier de chaînes à l'égard de la culture donnée. Par exemple, en république tchèque ("cs-CZ") le titre correct de cas devrait profiter seulement la première lettre du premier mot seulement.

1voto

Anuraj Points 6835

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X