2010-12-13 13 views

Respuesta

14
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray()); 
+2

Respuesta interesante y bonita, pero no creo que LINQ sea la herramienta adecuada para operaciones de bajo nivel. – ProfK

+2

De acuerdo. Subí la respuesta de Oded, también. Pero esto es algo que quería probar con LINQ como dijo OP. – decyclone

28

Si sólo tiene una palabra de la cadena, puede utilizar TextInfo.ToTitleCase. No es necesario usar Linq.

Como @Guffa señaló:

Esto convertirá cualquier cadena a mayúsculas, por lo que, "hola mundo" y "Hello World" sería tanto puede convertir en "Hello World".


Para lograr exectly lo que pidió (convertir todos los caracteres a menor, excepto el primero), puede hacer lo siguiente:

string mostLower = myString.Substring(0, 1) + myString.Substring(1).ToLower(); 
+7

Eso no hace lo que el OP solicitó. En lugar de convertir la secuencia ''THIS AND THAT' 'en'' This and that '', la convertirá en '' This And That ''. – Guffa

+3

Adición: Me acabo de dar cuenta de que 'ToTitleCase' deja sin cambios una cadena en mayúsculas. Girará '" hello world "' en '" Hello World "', pero dejará '' HELLO WORLD "' sin cambios. – Guffa

+0

En segundo lugar lo que dijo Guffa; la descripción aquí lo dice así: https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx –

6

uso de espacio de nombres: using System.Globalization;

. ..

string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello"); 

EDITAR

Este código solo funciona si su única palabra .Para convertir todos los caracteres en inferiores, excepto la primera letra, compruebe la Respuesta de Guffa.

string value = myString.Substring(0, 1) + myString.Substring(1).ToLower(); 
+1

Eso no hace lo que pidió el OP. En lugar de convertir la secuencia ''THIS AND THAT' 'en'' This and that '', la convertirá en '' This And That ''. – Guffa

+0

Adición: Me acabo de dar cuenta de que 'ToTitleCase' deja sin cambios una cadena en mayúsculas. Convertirá ''esto y aquello' 'en''Esto Y Eso' ', pero '' ESTE Y ESO '' no cambiará. – Guffa

3
No

asegurarse de que puede hacerlo en LINQ aquí es un enfoque no LINQ:

public static string FirstCap(string value) 
    { 
     string result = String.Empty; 

     if(!String.IsNullOrEmpty(value)) 
     { 
      if(value.Length == 1) 
      { 
       result = value.ToUpper(); 
      } 
      else 
      { 
       result = value.Substring(0,1).ToString().ToUpper() + value.Substring(1).ToLower(); 
      } 
     } 

     return result; 
    } 
18

Esto se puede hacer con las operaciones de cadenas simples:

s = s.Substring(0, 1) + s.Substring(1).ToLower(); 

en cuenta que esto exactamente lo que pediste, es decir, convierte todos los caracteres en minúsculas, excepto el primero que no se modifica.

Si por el contrario también desea cambiar el primer carácter en mayúsculas, puede hacer:

s = s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); 

Tenga en cuenta que este código se supone que hay por lo menos dos caracteres en las cadenas. Si existe la posibilidad de que sea más corto, por supuesto deberías probarlo primero.

+1

que obviamente se podría convertir muy bien a un método de extensión si es necesario ... :) –

+0

Este código funcionará con una cadena de caracteres única. –

3

según el ejemplo de guffa anterior (ligeramente modificado). podría convertir eso a un método de extensión (por favor, perdón por el método llamado mal :)):

public static string UpperFirst(this string source) 
{ 
    return source.ToLower().Remove(0, 1) 
      .Insert(0, source.Substring(0, 1).ToUpper()); 
} 

de uso:

var myNewString = myOldString.UpperFirst(); 
// or simply referenced as myOldString.UpperFirst() where required 

aplausos Guffa

+0

Información muy útil, gracias. – Ricky

2
var initialString = "Hello hOW r u?";   

var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1)); 
+0

priyanka, por supuesto necesitarás configurar la primera parte de esa initialString ToUpper() :-) de lo contrario solo enviarás una cadena en minúscula cada vez (a menos que la primera letra sea de hecho mayúscula, como es tu ejemplo) . –

Cuestiones relacionadas