C #: comment obtenir le premier caractère d'une chaîne?

177

Le premier chard'une chaîne peut-il être récupéré en procédant comme suit?

MyString.ToCharArray[0]
Craig Johnston
la source
4
Qu'avez-vous appris en l'essayant?
Michael Petrotta
1
@Michael: Il y a eu une erreur de compilation. Comment êtes-vous censé utiliser ToCharArray sinon de cette façon?
Craig Johnston
3
Pour mémoire, ToCharArrayest une méthode , vous devez l'exécuter d'abord, par exemple char[] chars = str.ToCharArray();, puis utiliser char first = chars[0];. Vous pouvez également le découper str.ToCharArray()[0];. Dans tous les cas, assurez-vous de vérifier que la chaîne n'est pas nulle et qu'elle contient au moins un caractère - vous pouvez le faire en utilisant if(!String.IsNullOrEmpty(str)).
Kobi
1
Craig .. l'utilisation de ToCharArray est incorrecte. Voyez ma réponse.
Nayan
4
Voulez-vous le premier charou le premier caractère ? Si vous essayez ceci et que cela semble fonctionner, essayez à nouveau avec 𣊾ou 𣇞, qui ont tous deux échoué dans un programme que j'utilisais et qui a été écrit en C # avec ce bogue exact.
hippietrail

Réponses:

56

Mystring[0] Cela devrait suffire

Aqwert
la source
51
Je ne devrais pas passer ces cinq secondes supplémentaires à taper les mots, "devrait suffire".
Robert Harvey
Qui a répondu à cette question en premier?
Craig Johnston
Sélectionnez l'onglet le plus ancien pour voir qu'il est Matthew
johnc
10
@johnc: Ou mieux, survolez l'horodatage.
Jeff Mercado du
22

Essaye ça,

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

Sanjay Kumaar
la source
6
La différence entre cette réponse et celle choisie est que cette solution renvoie une chaîne et l'autre renvoie un caractère.
Loïc Lopes
char n'obtient qu'un seul caractère mais ma solution peut en résulter plus d'un si vous le souhaitez.
Sanjay Kumaar
1
C'était juste une précision car le type peut avoir de l'importance en fonction de ce que vous voulez en faire.
Loïc Lopes
18

La différence entre MyString[0]et MyString.ToCharArray()[0]est que le premier traite la chaîne comme un tableau en lecture seule, tandis que ToCharArray()crée un nouveau tableau. Le premier sera plus rapide (et plus facile) pour presque tout ce qui fonctionnera, mais ToCharArraypeut être nécessaire si vous avez une méthode qui doit accepter un tableau, ou si vous souhaitez changer le tableau.

Si la chaîne n'est pas connue pour être non nulle et non vide, vous pouvez faire:

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

qui renvoie une valeur char?nulle ou le premier caractère de la chaîne, selon le cas.

Jon Hanna
la source
Merci de mentionner char?comme moyen d'inclure la possibilité "il n'y a pas de premier caractère".
ToolmakerSteve
17

Vous pouvez utiliser LINQ

char c = mystring.FirstOrDefault()

Il sera égal à '\0'si la chaîne est vide.

Dmitry S.
la source
8

Ou vous pouvez faire ceci:

MyString[0];
James Bond
la source
6
@Robert, non, je veux le revoir une fois de plus, juste pour être sûr!
jjnguy
1
Je n'ai tout simplement pas vu ceux avant le mien :)
james_bond
1
pas de soucis. Je le fais tout le temps aussi. Je suis un typeur vraiment lent.
jjnguy
8

Juste une autre approche:

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

Je pense que tu cherches ça MyString.ToCharArray()[0]

:)

Mais vous pouvez MyString[0]aussi l' utiliser .

Nayan
la source
1

L'exemple suivant pour obtenir le premier caractère d'une chaîne peut aider quelqu'un

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

MyString.Remove (1, 2); fonctionne aussi

Clint Gaydon
la source
0

La réponse à votre question est NON.

Correct est MyString [position du caractère]. Pour votre cas MyString [0], 0 est le PREMIER caractère de toute chaîne.

Une valeur de caractère est désignée par '(guillemet simple), comme cette valeur de caractère x s'écrit' x '.

Une valeur de chaîne est désignée par "(guillemets doubles), comme cette valeur de chaîne x s'écrit" x ".

Donc, la méthode Substring () ne renvoie pas non plus de caractère, la méthode Substring () renvoie une chaîne !!!

Une chaîne est un tableau de caractères et le dernier caractère doit être le caractère «\ 0» (nul). C'est la différence entre le tableau de caractères et la chaîne (qui est un tableau de caractères avec le dernier caractère comme "marqueur de fin de chaîne" '\ 0' nul.

Et notez également que «x» N'EST PAS ÉGAL à «x». Parce que "x" est en fait 'x' + '\ 0'.

Biddut Mitra
la source
0

En C # 8, vous pouvez utiliser des plages.

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

Ajoutez un ?après myStringpour gérer les nullchaînes.

Dmitry S.
la source
-2

l'obtention d'un caractère à partir d'une chaîne peut dépendre de l'encadrement (la chaîne par défaut est 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
la source
2
Comment est-ce une réponse?
Nilesh