C #: jak uzyskać pierwszy znak ciągu?


177

Czy charmożna pobrać pierwszy element ciągu, wykonując następujące czynności?

MyString.ToCharArray[0]

4
Czego się nauczyłeś, kiedy tego próbowałeś?
Michael Petrotta

1
@Michael: Wystąpił błąd kompilatora. Jak zamierzasz używać ToCharArray, jeśli nie w ten sposób?
Craig Johnston

3
Dla przypomnienia, ToCharArrayjest to metoda , którą należy najpierw uruchomić, np. A dopiero char[] chars = str.ToCharArray();potem użyć char first = chars[0];. Możesz również wbić go w str.ToCharArray()[0];. Tak czy inaczej, upewnij się, że ciąg nie jest pusty i ma co najmniej jeden znak - możesz to zrobić za pomocą if(!String.IsNullOrEmpty(str)).
Kobi

1
Craig ... użycie ToCharArray jest nieprawidłowe. Zobacz moją odpowiedź.
Nayan,

4
Chcesz pierwszą charczy pierwszą postać ? Jeśli spróbujesz tego i wydaje się, że działa, spróbuj ponownie z 𣊾lub 𣇞, co nie powiodło się w programie, którego używałem, który został napisany w C # z tym dokładnie błędem.
hippietrail

Odpowiedzi:



56

Mystring[0] powinno wystarczyć


51
Nie powinno spędzać tych dodatkowych pięciu sekund na wpisywaniu słów, „powinno wystarczyć”.
Robert Harvey

Kto pierwszy odpowiedział na to pytanie?
Craig Johnston

Wybierz najstarszą kartę, aby zobaczyć, że jest to Matthew
johnc

10
@johnc: Albo lepiej, najedź kursorem na sygnaturę czasową.
Jeff Mercado,

21

Spróbuj tego,

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


6
Różnica między tą odpowiedzią a wybraną polega na tym, że to rozwiązanie zwraca ciąg znaków, a drugie zwraca znak.
Loïc Lopes,

char otrzymuje tylko jeden znak, ale moje rozwiązanie może dać więcej niż jeden, jeśli chcesz.
Sanjay Kumaar,

1
To była tylko precyzja, ponieważ typ może mieć znaczenie w zależności od tego, co chcesz z nim zrobić.
Loïc Lopes

18

Różnica między MyString[0]i MyString.ToCharArray()[0]polega na tym, że pierwsza traktuje ciąg jako tablicę tylko do odczytu, podczas gdy ToCharArray()tworzy nową tablicę. Pierwsza z nich będzie szybsza (i łatwiejsza) dla prawie wszystkiego, w czym będzie działać, ale ToCharArraymoże być konieczna, jeśli masz metodę, która musi akceptować tablicę lub jeśli chcesz zmienić tablicę.

Jeśli wiadomo, że łańcuch nie jest zerowy i niepusty, możesz to zrobić:

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

która zwraca char?odpowiednio null lub pierwszy znak w ciągu.


Dziękuję za char?wskazanie jako sposobu na uwzględnienie możliwości „nie ma pierwszego znaku”.
ToolmakerSteve

17

Możesz użyć LINQ

char c = mystring.FirstOrDefault()

Będzie równe, '\0'jeśli ciąg jest pusty.


8

Lub możesz to zrobić:

MyString[0];

6
@Robert, naw, chcę to jeszcze raz zobaczyć, tak dla pewności!
jjnguy

1
Po prostu nie widziałem tych przed moimi :)
james_bond

1
bez obaw. Ja też to robię cały czas. Jestem naprawdę powolnym typerem.
jjnguy

8

Po prostu inne podejście:

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

5

Myślę, że tego szukasz MyString.ToCharArray()[0]

:)

Ale możesz MyString[0]też użyć .



0

Poniższy przykład dotyczący uzyskania pierwszego znaku z łańcucha może komuś pomóc

string anyNameForString = "" + stringVariableName[0];

0

Odpowiedź na twoje pytanie brzmi NIE.

Prawidłowe jest MyString [pozycja znaku]. W twoim przypadku MyString [0], 0 jest PIERWSZYM znakiem dowolnego ciągu.

Wartość znaku jest oznaczona jako „(pojedynczy cudzysłów), tak jak ta wartość znaku x jest zapisywana jako„ x ”.

Wartość ciągu oznaczana jest jako „(cudzysłów podwójny), tak jak ta wartość ciągu x jest zapisywana jako„ x ”.

Więc metoda Substring () również nie zwraca znaku, metoda Substring () zwraca łańcuch !!!

Łańcuch jest tablicą znaków, a ostatni znak musi być znakiem „\ 0” (null). To jest różnica między tablicą znaków a ciągiem znaków (czyli tablicą znaków z ostatnim znakiem jako „znacznikiem końca łańcucha” '\ 0' null.

Zauważ też, że „x” NIE JEST RÓWNE „x”. Ponieważ „x” to w rzeczywistości „x” + „\ 0”.


0

W C # 8 możesz używać zakresów.

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

Dodaj ?po, myStringaby obsłużyć nullciągi.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.