98 votes

Comment mettre en majuscule le premier caractère de chaque mot, ou le premier caractère d'une chaîne entière, avec C #?

Je pourrais écrire mon propre algorithme pour le faire, mais j'estime qu'il devrait exister l'équivalent de Ruby humanize en C #.

Je l'ai googlé mais je n'ai trouvé que des moyens d'humaniser les dattes.

Exemples:

  • Une façon de transformer "Lorem Lipsum Et" en "Lorem lipsum et"
  • Une façon de transformer "Lorem lipsum et" en "Lorem Lipsum Et"

156voto

Spoike Points 32082

Tel que discuté dans les commentaires de @miguel de réponse, vous pouvez utiliser TextInfo.ToTitleCase qui est disponible depuis .NET 1.1. Voici un code correspondant à votre exemple:

string lipsum1 = "Lorem lipsum et";

// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;

// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}", 
                  lipsum1, 
                  textInfo.ToTitleCase( lipsum1 )); 

// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et

Il ignorera l'enveloppe des choses qui sont tout en majuscules comme "LOREM LIPSUM ET" parce que c'est en prenant soin de les cas, si les acronymes sont dans le texte (alors que les "NAMBLA" ne devient pas "nambla" ou "Nambla").

Toutefois, si vous souhaitez uniquement mettre en majuscule le premier caractère que vous pouvez faire à la solution qui est plus ici... ou vous pouvez fractionner la chaîne et de mettre en majuscule le premier de la liste:

string lipsum2 = "Lorem Lipsum Et";

string lipsum2lower = textInfo.ToLower(lipsum1);

string[] lipsum2split = lipsum2lower.Split(' ');

bool first = true;

foreach (string s in lipsum2split)
{
    if (first)
    {
        Console.Write("{0} ", textInfo.ToTitleCase(s));
        first = false;
    }
    else
    {
        Console.Write("{0} ", s);
    }
}

// Will output: Lorem lipsum et

2voto

miguel Points 765

Essayez ce lien:

Capitalisation et cordes

2voto

Daniel Earwicker Points 63298

Si vous voulez juste mettre le premier caractère en majuscule, insérez-le simplement dans votre propre méthode utilitaire:

 return string.IsNullOrEmpty(str) 
    ? str
    : str[0].ToUpperInvariant() + str.Substring(1).ToLowerInvariant();
 

Il existe également une méthode de bibliothèque pour capitaliser le premier caractère de chaque mot:

http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx

0voto

patjbs Points 1352

Il n'y a pas de prédéfinis solution pour le bon linguistique captialization dans .NET. Quel genre de capitialization allez-vous pour? Êtes-vous en suivant le Chicago Manual of Style conventions? AMA ou DÉPUTÉ? Même du simple phrase anglaise de capitalisation a plus de 1000 des exceptions pour les mots. Je ne peux pas parler de ce que ruby humaniser le fait, mais j'imagine que c'est probablement de ne pas suivre les règles linguistiques de la capitalisation et de la place fait quelque chose de beaucoup plus simple.

En interne, nous avons rencontré ce même problème et a dû écrire une assez grande quantité de code juste pour gérer correctement (dans notre petit monde) boîtier de titres d'article, pas même la comptabilité de la peine de capitalisation. Et en effet, elle ne se "floue" :)

Cela dépend vraiment de ce que vous avez besoin - pourquoi êtes-vous en train d'essayer de convertir les peines du bon de capitalisation (et dans quel contexte)?

-1voto

vinny Points 1543

Autant que je sache, il n'y a pas moyen de faire cela sans écrire (ou cribbing) du code. C # les filets (ha!) Vous majuscules, minuscules et titres (ce que vous avez):

http://support.microsoft.com/kb/312890/EN-US/

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