C #: Wie bekomme ich das erste Zeichen eines Strings?


177

Kann der erste chareiner Zeichenfolge wie folgt abgerufen werden?

MyString.ToCharArray[0]

4
Was hast du gelernt, als du es ausprobiert hast?
Michael Petrotta

1
@ Michael: Es gab einen Compilerfehler. Wie sollen Sie ToCharArray verwenden, wenn nicht auf diese Weise?
Craig Johnston

3
Wenn es sich bei dem Datensatz ToCharArrayum eine Methode handelt , sollten Sie sie zuerst ausführen, z. B. char[] chars = str.ToCharArray();verwenden char first = chars[0];. Sie können es auch schlachten str.ToCharArray()[0];. Stellen Sie in jedem Fall sicher, dass die Zeichenfolge nicht null ist und mindestens ein Zeichen enthält - Sie können dies mit verwenden if(!String.IsNullOrEmpty(str)).
Kobi

1
Craig .. die Verwendung von ToCharArray ist falsch. Siehe meine Antwort.
Nayan

4
Willst du den ersten charoder den ersten Charakter ? Wenn Sie dies versuchen und es zu funktionieren scheint, versuchen Sie es erneut mit 𣊾oder 𣇞, was beide in einem von mir verwendeten Programm fehlgeschlagen sind, das in C # mit genau diesem Fehler geschrieben wurde.
Hippietrail

Antworten:



56

Mystring[0] sollte genug sein


50
Sollte man nicht diese zusätzlichen fünf Sekunden damit verbringen, die Wörter zu tippen, "sollte genug sein".
Robert Harvey

Wer hat diese Frage zuerst beantwortet?
Craig Johnston

Wählen Sie die älteste Registerkarte, um zu sehen, dass es als Matthew
Johnc

10
@ Johnc: Oder besser, schweben Sie über dem Zeitstempel.
Jeff Mercado

21

Versuche dies,

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


6
Der Unterschied zwischen dieser und der ausgewählten Antwort besteht darin, dass diese Lösung eine Zeichenfolge und die andere ein Zeichen zurückgibt.
Loïc Lopes

char bekommt nur ein Zeichen, aber meine Lösung kann mehr als ein Ergebnis sein, wenn Sie wollen.
Sanjay Kumaar

1
Es war nur eine Präzision, da der Typ von Bedeutung sein kann, je nachdem, was Sie damit machen möchten.
Loïc Lopes

18

Der Unterschied zwischen MyString[0]und MyString.ToCharArray()[0]besteht darin, dass erstere die Zeichenfolge als schreibgeschütztes Array behandelt und gleichzeitig ToCharArray()ein neues Array erstellt. Ersteres wird schneller (zusammen mit einfacher) für fast alles sein, wo es funktionieren wird, aberToCharArray kann jedoch erforderlich sein, wenn Sie eine Methode haben, die ein Array akzeptieren muss, oder wenn Sie das Array ändern möchten.

Wenn nicht bekannt ist, dass die Zeichenfolge nicht null und nicht leer ist, können Sie Folgendes tun:

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

char?Dies gibt je nach Bedarf ein Nullzeichen oder das erste Zeichen in der Zeichenfolge zurück.


Vielen Dank für die Erwähnung char?als Möglichkeit, die Möglichkeit "Es gibt kein erstes Zeichen" aufzunehmen.
ToolmakerSteve

17

Sie können LINQ verwenden

char c = mystring.FirstOrDefault()

Es ist gleich, '\0'wenn die Zeichenfolge leer ist.


8

Oder Sie können dies tun:

MyString[0];

6
@ Robert, nein, ich möchte es noch einmal sehen, nur um sicher zu sein!
jjnguy

1
Ich habe die vor mir einfach nicht gesehen :)
james_bond

1
Keine Bange. Ich mache es auch die ganze Zeit. Ich bin ein sehr langsamer Typ.
jjnguy

8

Nur ein weiterer Ansatz:

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

5

Ich denke du suchst das MyString.ToCharArray()[0]

:) :)

Aber Sie können auch verwenden MyString[0].



0

Das folgende Beispiel zum Abrufen des ersten Zeichens aus einer Zeichenfolge kann jemandem helfen

string anyNameForString = "" + stringVariableName[0];

0

Die Antwort auf Ihre Frage lautet NEIN.

Richtig ist MyString [Position des Zeichens]. In Ihrem Fall MyString [0] ist 0 das ERSTE Zeichen einer Zeichenfolge.

Ein Zeichenwert wird mit '(einfaches Anführungszeichen) bezeichnet, so wie dieser x-Zeichenwert als' x 'geschrieben wird.

Ein Zeichenfolgenwert wird mit "(doppeltes Anführungszeichen) bezeichnet, so wie dieser x-Zeichenfolgenwert als" x "geschrieben wird.

Die Methode Substring () gibt also auch kein Zeichen zurück, die Methode Substring () gibt einen String zurück !!!

Eine Zeichenfolge ist ein Array von Zeichen, und das letzte Zeichen muss das Zeichen '\ 0' (null) sein. Das ist der Unterschied zwischen Zeichenarray und Zeichenfolge (dies ist ein Array von Zeichen mit dem letzten Zeichen als "Ende der Zeichenfolgenmarkierung" '\ 0' null.

Beachten Sie auch, dass 'x' NICHT gleich "x" ist. Weil "x" eigentlich 'x' + '\ 0' ist.


0

In C # 8 können Sie Bereiche verwenden.

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

Fügen Sie ein ?After hinzu myString, um nullZeichenfolgen zu verarbeiten .


-2

Das Abrufen eines Zeichens aus einer Zeichenfolge kann von der Folge abhängen (die Zeichenfolge ist standardmäßig 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
Wie ist das eine Antwort?
Nilesh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.