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.