C #: ¿como obtener el primer carácter de una cadena?


177

¿Se charpuede recuperar el primero de una cadena haciendo lo siguiente?

MyString.ToCharArray[0]

44
¿Qué aprendiste cuando lo probaste?
Michael Petrotta

1
@ Michael: Hubo un error del compilador. ¿Cómo se supone que debes usar ToCharArray si no es así?
Craig Johnston

3
Para el registro, ToCharArrayes un método , primero debe ejecutarlo, por ejemplo char[] chars = str.ToCharArray();, y luego usarlo char first = chars[0];. También puedes destriparlo str.ToCharArray()[0];. De cualquier manera, asegúrese de verificar que la cadena no sea nula y que tenga al menos un carácter; puede hacerlo usando if(!String.IsNullOrEmpty(str)).
Kobi

1
Craig ... el uso de ToCharArray está mal. Mira mi respuesta.
Nayan

44
¿Quieres el primer charo el primer personaje ? Si intenta esto y parece funcionar, intente nuevamente con 𣊾o 𣇞, que ambos fallaron en un programa que estaba usando que estaba escrito en C # con este error exacto.
hippietrail

Respuestas:



56

Mystring[0] debería ser suficiente


51
No debería haber pasado esos cinco segundos adicionales escribiendo las palabras, "debería ser suficiente".
Robert Harvey

¿Quién respondió esta pregunta primero?
Craig Johnston

Seleccione la pestaña más antigua para verlo como Matthew
johnc

10
@johnc: O mejor, pasa el cursor sobre la marca de tiempo.
Jeff Mercado

21

Prueba esto,

string s1="good"; string s=s1.Substring(0,1);


66
La diferencia entre esta respuesta y la elegida es que esta solución devuelve una cadena y la otra devuelve un carácter.
Loïc Lopes

Los caracteres solo tienen un carácter, pero mi solución puede resultar en más de uno si lo desea.
Sanjay Kumaar

1
Fue solo una precisión ya que el tipo puede ser importante según lo que quieras hacer con él.
Loïc Lopes

18

La diferencia entre MyString[0]y MyString.ToCharArray()[0]es que el primero trata la cadena como una matriz de solo lectura, mientras ToCharArray()crea una nueva matriz. El primero será más rápido (junto con más fácil) para casi cualquier cosa donde funcione, pero ToCharArraypuede ser necesario si tiene un método que necesita aceptar una matriz, o si desea cambiar la matriz.

Si se sabe que la cadena no es nula y no está vacía, puede hacer:

string.IsNullOrEmpty(MyString) ? (char?)null : MyString[0]

que devuelve un char?nulo o el primer carácter de la cadena, según corresponda.


Gracias por mencionar char?como una forma de incluir la posibilidad "no hay un primer personaje".
ToolmakerSteve

17

Puedes usar LINQ

char c = mystring.FirstOrDefault()

Será igual a '\0'si la cadena está vacía.


8

O puedes hacer esto:

MyString[0];

66
@Robert, no, ¡quiero verlo una vez más, solo para estar seguro!
jjnguy

1
Simplemente no veo los antes que la mía :)
james_bond

1
sin preocupaciones. Lo hago todo el tiempo también. Soy un tipeador muy lento.
jjnguy

8

Solo otro enfoque:

string mystr = "hello";
MessageBox.show(mystr.Substring(0, 1));

5

Creo que estas buscando esto MyString.ToCharArray()[0]

:)

Pero también puedes usarlo MyString[0].



0

El siguiente ejemplo para obtener el primer carácter de una cadena podría ayudar a alguien

string anyNameForString = "" + stringVariableName[0];

0

La respuesta a su pregunta es NO.

La correcta es MyString [posición del personaje]. Para su caso MyString [0], 0 es el PRIMER carácter de cualquier cadena.

Un valor de carácter se designa con '(comilla simple), como este valor de carácter x se escribe como' x '.

Un valor de cadena se designa con "(comillas dobles), como este valor de cadena x se escribe como" x ".

¡Entonces el método Substring () tampoco devuelve un carácter, el método Substring () devuelve una cadena!

Una cadena es una matriz de caracteres, y el último carácter debe ser un carácter '\ 0' (nulo). Esa es la diferencia entre la matriz de caracteres y la cadena (que es una matriz de caracteres con el último carácter como "final del marcador de cadena" '\ 0' nulo.

Y también observe que 'x' NO ES IGUAL a "x". Porque "x" es en realidad 'x' + '\ 0'.


0

En C # 8 puedes usar rangos.

myString[0..Math.Min(myString.Length, 1)]

Agregue un ?after myStringpara manejar nullcadenas.


-2

obtener un char de una cadena puede depender de la búsqueda (la cadena predeterminada es UTF-16)

https://stackoverflow.com/a/32141891

string str = new String(new char[] { '\uD800', '\uDC00', 'z' });
string first = str.Substring(0, char.IsHighSurrogate(str[0]) ? 2 : 1);

2
¿Cómo es esta una respuesta?
Nilesh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.