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]
Craig Johnston
fuente
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

aqwert
fuente
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);

Sanjay Kumaar
fuente
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.

Jon Hanna
fuente
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.

Dmitry S.
fuente
8

O puedes hacer esto:

MyString[0];
james_bond
fuente
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));
knkarthick24
fuente
5

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

:)

Pero también puedes usarlo MyString[0].

Nayan
fuente
0

MyString.Remove (1, 2); también funciona

Clint Gaydon
fuente
0

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

string anyNameForString = "" + stringVariableName[0];
Ibrahim Iqbal
fuente
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'.

Biddut Mitra
fuente
0

En C # 8 puedes usar rangos.

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

Agregue un ?after myStringpara manejar nullcadenas.

Dmitry S.
fuente
-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);
usuario2849180
fuente
2
¿Cómo es esta una respuesta?
Nilesh