2010-08-13 37 views
21

¿Cómo se puede establecer la primera letra de un texto en mayúscula?Cómo hacer una primera letra capital en C#

Ejemplo:

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

¿Puede la cadena ser algo como '" 99c waffles "' y quieres t '" 99c Waffles "'? Es decir, ¿cuál es su definición de "primera letra"? – polygenelubricants

+0

posible duplicado de [Hacer la primera letra de una mayúscula de cadena] (http://stackoverflow.com/questions/4135317/make-first-letter-of-a-string-upper-case) – Jeroen

Respuesta

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

No necesita hacer el 'source.ToCharArray()'. Una cadena ya es una matriz char y puede indexarse ​​con 'fuente [0]'. –

+5

@Alastair, las cadenas son inmutables pero las matrices de caracteres no lo son. – Jacob

+1

@Jacob, Oooh sí. Muestra cuán muerto está mi cerebro el viernes por la tarde:/ –

35

que va a ser algo como esto:

// precondition: before must not be an empty string 

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

¿Por qué tantos tipos como Substring? Tiene un mal desempeño. –

+0

@Danny: analicemos su comentario aquí http://stackoverflow.com/questions/3474578/what-is-the-performance-of-substring-in-net – polygenelubricants

+2

.NET también es lento. C++ o ensamblador es mucho más rápido. ¿Eso significa que tenemos que soltar .NET y pasar a idiomas más rápidos? –

3

Si está usando C# y luego probar este código:

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

Esto es feo. Si usa C#, ¿por qué estaría importando/haciendo referencia a la DLL de Visual Basic? –

+0

Leer la etiqueta C#. NO Significa VB –

+6

@steven: puede usar bibliotecas VB desde C#. –

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

Esto se siente como un uso algo gratuito de LINQ para mí ... –

+0

@Jon Skeet - Eso fue completamente mi intención :) En realidad, me preguntaba cuál sería el rendimiento en comparación con el método de subcadena anterior. – arootbeer

18

La respuesta de los polilefriógenos está bien para la mayoría de los casos, pero es posible que tenga que pensar en cuestiones culturales. ¿Quieres que se capitalice de una manera invariable en cultura, en la cultura actual o en una cultura específica? Puede marcar una gran diferencia en Turquía, por ejemplo. Así que es posible que desee considerar:

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

o si lo prefiere métodos de String:

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

donde culture podría ser CultureInfo.InvariantCulture, o la cultura actual, etc.

Para más información sobre este problema , vea el Turkey Test.

+0

Considere acerca de diferentes CultrueInfos, así como TextInfos. –

+0

dime la mayoría de los casos cuando tenemos que importar Microsoft.VisualBasic dll cuando trabajamos en C# .net –

+0

Teniendo en cuenta "CultureInfo" ha hecho que la solución sea perfecta ... Muchas gracias también por Turkey Test :) –

1

Me doy cuenta de que esta es una publicación anterior, pero recientemente tuve este problema y lo resolví con el siguiente método.

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; 
    } 

En el ejemplo siguiente al hacer clic en el botón ejecuta este código simple outBox.Text = capSentences(inBox.Text.Trim()); que tira el texto de la caja superior y la coloca en el cuadro inferior después de que el método anterior se ejecuta en él.

Sample Program

0

UppercaseWords estáticas de Cuerda (String BadName) { cadena 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

puedes arreglar tu formato de código? – Fiver

-1

Prueba este fragmento de código:

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 = "esto es una prueba" .ToCharArray(); trabajará –

0

estas funciones hace que la capital de la primera letra de todas las palabras en una cadena

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

que utilizan esta variante:

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