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]

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


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


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.


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.


8

Ou vous pouvez faire ceci:

MyString[0];

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

5

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

:)

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


1

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

string anyNameForString = "" + stringVariableName[0];


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'.


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.


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

2
Comment est-ce une réponse?
Nilesh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.