2010-08-13 6 views
21

Comment la première lettre d'un texte peut-elle être mise en majuscule?Comment faire un capital de première lettre en C#

Exemple:

it is a text. = It is a text. 
+2

Est-ce que la corde peut être quelque chose comme «gaufres 99c» et que vous voulez ge t '" 99c gaufres "'? Autrement dit, quelle est votre définition de «première lettre»? – polygenelubricants

+0

duplication possible de [Faire la première lettre d'une chaîne majuscule] (http://stackoverflow.com/questions/4135317/make-first-letter-of-a-string-upper-case) – Jeroen

Répondre

39
public static string ToUpperFirstLetter(this string source) 
{ 
    if (string.IsNullOrEmpty(source)) 
     return string.Empty; 
    // convert to char array of the string 
    char[] letters = source.ToCharArray(); 
    // upper case the first char 
    letters[0] = char.ToUpper(letters[0]); 
    // return the array made of the new char array 
    return new string(letters); 
} 
+2

Vous n'avez pas besoin de faites le 'source.ToCharArray()'. Une chaîne est déjà un tableau char et peut être indexée avec juste 'source [0]'. –

+5

@Alastair, les chaînes sont immuables mais les tableaux char ne le sont pas. – Jacob

+1

@Jacob, Oooh ouais. Montre à quel point mon cerveau est mort un vendredi après-midi:/ –

35

Ce sera quelque chose comme ceci:

// precondition: before must not be an empty string 

String after = before.Substring(0, 1).ToUpper() + before.Substring(1); 
+0

Pourquoi tant de gars comme Substring? Il a une mauvaise performance. –

+0

@Danny: discutons de votre commentaire ici http://stackoverflow.com/questions/3474578/what-is-the-performance-of-substring-in-net – polygenelubricants

+2

.NET est également lent. C++ ou assembleur est beaucoup plus rapide. Cela signifie-t-il que nous devons supprimer .NET et passer à des langages plus rapides? –

3

Si vous utilisez C# essayez ce code:

Microsoft.VisualBasic.StrConv(sourceString, Microsoft.VisualBasic.vbProperCase) 
+1

C'est moche. Si vous utilisez C#, pourquoi voudriez-vous importer/référencer la DLL Visual Basic? –

+0

Lire l'étiquette C#. NOT signifie que VB –

+6

@steven: Vous pouvez utiliser des bibliothèques VB de C#. –

0
text = new String(
    new [] { char.ToUpper(text.First()) } 
    .Concat(text.Skip(1)) 
    .ToArray() 
); 
+1

Cela ressemble à une utilisation quelque peu gratuite de LINQ pour moi ... –

+0

@Jon Skeet - C'était entièrement mon intention :) Je me demandais réellement ce que la performance serait comparée à la méthode de sous-chaîne ci-dessus. – arootbeer

18

La réponse de polygenelubricants est bonne dans la plupart des cas, mais vous devez potentiellement penser à des problèmes culturels. Voulez-vous que cela soit capitalisé d'une manière invariable par culture, dans la culture actuelle ou dans une culture spécifique? Cela peut faire une grande différence en Turquie, par exemple. Donc, vous pouvez envisager:

CultureInfo culture = ...; 
text = char.ToUpper(text[0], culture) + text.Substring(1); 

ou si vous préférez des méthodes sur String:

CultureInfo culture = ...; 
text = text.Substring(0, 1).ToUpper(culture) + text.Substring(1); 

culture peut-être CultureInfo.InvariantCulture, ou la culture actuelle, etc.

Pour en savoir plus sur ce problème , voir le Turkey Test.

+0

Pensez à différents CultrueInfos, ainsi que TextInfos. –

+0

dites-moi le plus cas quand nous devons importer dll Microsoft.VisualBasic lorsque nous travaillons sur C# .net –

+0

Prenant en considération "CultureInfo" a rendu la solution parfaite ... Merci beaucoup aussi pour le test de la Turquie :) –

1

Je réalise qu'il s'agit d'un ancien article, mais j'ai récemment eu ce problème et l'ai résolu avec la méthode suivante.

private string capSentences(string str) 
    { 
     string s = ""; 

     if (str[str.Length - 1] == '.') 
      str = str.Remove(str.Length - 1, 1); 

     char[] delim = { '.' }; 

     string[] tokens = str.Split(delim); 

     for (int i = 0; i < tokens.Length; i++) 
     { 
      tokens[i] = tokens[i].Trim(); 

      tokens[i] = char.ToUpper(tokens[i][0]) + tokens[i].Substring(1); 

      s += tokens[i] + ". "; 
     } 

     return s; 
    } 

Dans l'exemple ci-dessous en cliquant sur le bouton exécute ce code simple outBox.Text = capSentences(inBox.Text.Trim()); qui tire le texte de la zone supérieure et il met dans la zone inférieure après la méthode ci-dessus fonctionne sur elle.

Sample Program

0

UppercaseWords de chaîne statique (chaîne badname) {chaîne FullName = "";

 if (BadName != null) 
     { 
      String[] FullBadName = BadName.Split(' '); 
      foreach (string Name in FullBadName) 
      { 
       String SmallName = ""; 
       if (Name.Length > 1) 
       { 
        SmallName = char.ToUpper(Name[0]) + Name.Substring(1).ToLower(); 
       } 
       else 
       { 
        SmallName = Name.ToUpper(); 
       } 
       FullName = FullName + " " + SmallName; 
      } 

     } 
     FullName = FullName.Trim(); 
     FullName = FullName.TrimEnd(); 
     FullName = FullName.TrimStart(); 
     return FullName; 
    } 
+0

pouvez-vous réparer votre formatage de code? – Fiver

-1

Essayez cet extrait de code:

char nm[] = "this is a test"; 

if(char.IsLower(nm[0])) nm[0] = char.ToUpper(nm[0]); 

//print result: This is a test 
+0

char [] nm = "ceci est un test" .ToCharArray(); marchera –

0

cette fonction rend le capital la première lettre de tous les mots dans une chaîne

public static string FormatSentence(string source) 
    { 
     var words = source.Split(' ').Select(t => t.ToCharArray()).ToList(); 
     words.ForEach(t => 
     { 
      for (int i = 0; i < t.Length; i++) 
      { 
       t[i] = i.Equals(0) ? char.ToUpper(t[i]) : char.ToLower(t[i]); 
      } 
     }); 
     return string.Join(" ", words.Select(t => new string(t)));; 
    } 
1

J'utilise cette variante:

private string FirstLetterCapital(string str) 
     { 
      return Char.ToUpper(str[0]) + str.Remove(0, 1);    
     } 
Questions connexes