C #: como obter o primeiro caractere de uma string?

177

A primeira charsequência de caracteres pode ser recuperada da seguinte maneira?

MyString.ToCharArray[0]
Craig Johnston
fonte
4
O que você aprendeu quando tentou?
Michael Petrotta
1
@ Michael: Houve um erro do compilador. Como você pretende usar o ToCharArray, se não dessa maneira?
Craig Johnston
3
Para o registro, ToCharArrayé um método , você deve executá-lo primeiro, por exemplo char[] chars = str.ToCharArray();, e depois usá-lo char first = chars[0];. Você também pode matá-lo str.ToCharArray()[0];. De qualquer forma, verifique se a sequência não é nula e tem pelo menos um caractere - você pode fazer isso usando if(!String.IsNullOrEmpty(str)).
Kobi
1
Craig .. o uso do ToCharArray está errado. Veja minha resposta.
Nayan
4
Você quer o primeiro charou o primeiro caractere ? Se você tentar isso e parece funcionar, tente novamente com 𣊾or 𣇞, que ambos falharam em um programa que eu estava usando e que foi escrito em C # com esse bug exato.
hippietrail

Respostas:

56

Mystring[0] deve ser suficiente

aqwert
fonte
51
Não deveria gastar esses cinco segundos extras digitando as palavras "deve ser o suficiente".
Robert Harvey
Quem respondeu a essa pergunta primeiro?
Craig Johnston
Selecione a guia mais velho para ver que como Matthew
johnc
10
@ johnc: Ou melhor, passe o mouse sobre o timestamp.
Jeff Mercado
21

Tente isso,

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

Sanjay Kumaar
fonte
6
A diferença entre essa resposta e a escolhida é que essa solução retorna uma string e a outra retorna um caractere.
Loïc Lopes
char obtém apenas um caractere, mas minha solução pode resultar em mais de um, se você desejar.
Sanjay Kumaar
1
Foi apenas uma precisão, pois o tipo pode ser importante de acordo com o que você deseja fazer com ele.
Loïc Lopes
18

A diferença entre MyString[0]e MyString.ToCharArray()[0]é que o primeiro trata a string como uma matriz somente leitura, enquanto ToCharArray()cria uma nova matriz. O primeiro será mais rápido (junto com o mais fácil) para praticamente qualquer coisa em que funcione, mas ToCharArraypode ser necessário se você tiver um método que precise aceitar uma matriz ou se desejar alterar a matriz.

Se a string não for nula e não vazia, você poderá:

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

que retorna um char?caractere nulo ou o primeiro na sequência, conforme apropriado.

Jon Hanna
fonte
Obrigado por mencionar char?como uma maneira de incluir a possibilidade "não há primeiro personagem".
Página
17

Você pode usar o LINQ

char c = mystring.FirstOrDefault()

Será igual a '\0'se a string estiver vazia.

Dmitry S.
fonte
8

Ou você pode fazer isso:

MyString[0];
james_bond
fonte
6
@ Robert, naw, eu quero ver mais uma vez, só para ter certeza!
Jjnguy 07/10/10
1
Eu só não ver os antes do meu :)
james_bond
1
não se preocupe. Eu faço isso o tempo todo também. Eu sou um digitador muito lento.
Jjnguy 07/10/10
8

Apenas outra abordagem:

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

Eu acho que você está procurando por isso MyString.ToCharArray()[0]

:)

Mas você pode usar MyString[0]também.

Nayan
fonte
0

MyString.Remove (1, 2); também funciona

Clint Gaydon
fonte
0

O exemplo a seguir para obter o primeiro caractere de uma string pode ajudar alguém

string anyNameForString = "" + stringVariableName[0];
Ibrahim Iqbal
fonte
0

A resposta à sua pergunta é NÃO.

Correto é MyString [posição do caractere]. No seu caso, MyString [0], 0 é o PRIMEIRO caractere de qualquer sequência.

Um valor de caractere é designado com '(aspas simples), assim como esse valor de x é escrito como' x '.

Um valor de sequência é designado com "(aspas duplas), como esse valor de sequência x é escrito como" x ".

Portanto, o método Substring () também não retorna um caractere, o método Substring () retorna uma string !!!

Uma string é uma matriz de caracteres e o último caractere deve ser '\ 0' (nulo). Essa é a diferença entre a matriz de caracteres e a string (que é uma matriz de caracteres com o último caractere como "marcador de fim de string" '\ 0' null.

E também observe que 'x' NÃO É IGUAL a "x". Porque "x" é realmente 'x' + '\ 0'.

Biddut Mitra
fonte
0

No C # 8, você pode usar intervalos.

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

Adicione um ?depois myStringpara lidar com nullseqüências de caracteres.

Dmitry S.
fonte
-2

obter um caractere de uma string pode depender do encconding (o padrão da string é 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);
user2849180
fonte
2
Como isso é uma resposta?
Nilesh