C #: come ottenere il primo carattere di una stringa?


177

È possibile charrecuperare la prima di una stringa procedendo come segue?

MyString.ToCharArray[0]

4
Cosa hai imparato quando l'hai provato?
Michael Petrotta,

1
@Michael: si è verificato un errore del compilatore. Come intendi utilizzare ToCharArray se non in questo modo?
Craig Johnston,

3
Per la cronaca, ToCharArrayè un metodo , è necessario eseguirlo prima, ad esempio char[] chars = str.ToCharArray();, e quindi utilizzare char first = chars[0];. Puoi anche macellarlo str.ToCharArray()[0];. In entrambi i casi, assicurati di controllare che la stringa non sia nulla e che abbia almeno un carattere: puoi farlo usando if(!String.IsNullOrEmpty(str)).
Kobi,

1
Craig .. l'uso di ToCharArray è sbagliato. Vedi la mia risposta
Nayan,

4
Vuoi il primo charo il primo personaggio ? Se provi questo e sembra funzionare, riprova con 𣊾o 𣇞, entrambi falliti in un programma che stavo usando che era scritto in C # con questo esatto bug.
hippietrail,

Risposte:



56

Mystring[0] dovrebbe essere abbastanza


51
Non dovremmo "spendere quei cinque secondi in più digitando le parole", dovrebbe bastare ".
Robert Harvey,

Chi ha risposto prima a questa domanda?
Craig Johnston,

Seleziona la scheda più vecchia per vederla come Matthew
johnc,

10
@johnc: o meglio, passa il mouse sopra il timestamp.
Jeff Mercado,

21

Prova questo,

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


6
La differenza tra questa risposta e quella scelta è che questa soluzione restituisce una stringa e l'altra restituisce un carattere.
Loïc Lopes,

il personaggio ottiene solo un personaggio, ma la mia soluzione può risultare più di uno se vuoi.
Sanjay Kumaar,

1
Era solo una precisione in quanto il tipo può essere importante in base a ciò che si desidera fare con esso.
Loïc Lopes il

18

La differenza tra MyString[0]e MyString.ToCharArray()[0]è che la prima tratta la stringa come un array di sola lettura, mentre ToCharArray()crea un nuovo array. Il primo sarà più veloce (insieme a più facile) per quasi tutto ciò che funzionerà, ma ToCharArraypuò essere necessario se si dispone di un metodo che deve accettare un array o se si desidera cambiare l'array.

Se la stringa non è nota per essere non nulla e non vuota, è possibile:

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

che restituisce uno char?di null o il primo carattere nella stringa, a seconda dei casi.


Grazie per aver menzionato char?come un modo per includere la possibilità "non esiste un primo personaggio".
ToolmakerSteve

17

Puoi usare LINQ

char c = mystring.FirstOrDefault()

Sarà uguale a '\0'se la stringa è vuota.


8

Oppure puoi farlo:

MyString[0];

6
@Robert, naw, voglio vederlo ancora una volta, per essere sicuro!
jjnguy,

1
Non ho visto quelli prima dei miei :)
james_bond

1
nessun problema. Lo faccio sempre. Sono un typer molto lento.
jjnguy,

8

Solo un altro approccio:

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

5

Penso che tu stia cercando questo MyString.ToCharArray()[0]

:)

Ma puoi MyString[0]anche usare .



0

L'esempio seguente per ottenere il primo carattere da una stringa potrebbe aiutare qualcuno

string anyNameForString = "" + stringVariableName[0];

0

La risposta alla tua domanda è NO.

Corretto è MyString [posizione del personaggio]. Nel tuo caso MyString [0], 0 è il PRIMO carattere di qualsiasi stringa.

Un valore di carattere è designato con '(virgoletta singola), come questo valore di carattere x è scritto come' x '.

Un valore di stringa è designato con "(virgoletta doppia), come questo valore di stringa x è scritto come" x ".

Quindi anche il metodo Substring () non restituisce un carattere, il metodo Substring () restituisce una stringa !!!

Una stringa è un array di caratteri e l'ultimo carattere deve essere '\ 0' (null) carattere. Questa è la differenza tra array di caratteri e stringa (che è un array di caratteri con l'ultimo carattere come "end of string marker" '\ 0' null.

E nota anche che 'x' NON È UGUALE a "x". Perché "x" è in realtà 'x' + '\ 0'.


0

In C # 8 puoi usare gli intervalli.

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

Aggiungi un ?after myStringper gestire le nullstringhe.


-2

ottenere un carattere da una stringa può dipendere dalla codifica (la stringa di default è 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
Come è una risposta?
Nilesh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.