C #: як отримати перший знак струни?


177

Чи можна отримати перший charрядок, виконавши наступне?

MyString.ToCharArray[0]

4
Що ти навчився, коли спробував?
Майкл Петротта

1
@Michael: Виникла помилка компілятора. Як ви мали намір використовувати ToCharArray, якщо не таким чином?
Крейг Джонстон

3
Для запису ToCharArray- це метод , спершу його слід запустити, наприклад char[] chars = str.ToCharArray();, а потім використовувати char first = chars[0];. Ви також можете порізати його str.ToCharArray()[0];. У будь-якому випадку переконайтеся, що ви перевіряєте, що рядок не є нульовим та має принаймні один символ - це можна зробити за допомогою if(!String.IsNullOrEmpty(str)).
Кобі

1
Крейг .. використання ToCharArray неправильне. Дивіться мою відповідь.
Найян

4
Ви хочете першого charчи першого персонажа ? Якщо ви спробуєте це, і, здається, це спрацює, спробуйте ще раз з 𣊾або 𣇞, яка не вдалася в програмі, яку я використовував, що було написано на C # з цією точною помилкою.
hippietrail

Відповіді:



56

Mystring[0] повинно вистачити


51
Якщо ви не витратили ці додаткові п'ять секунд на введення слів, "повинно вистачити".
Роберт Харві

Хто відповів на це питання першим?
Крейг Джонстон

Виберіть найдавнішу вкладку, щоб побачити, що це як Метью
johnc

10
@johnc: А ще краще, наведіть курсор миші на часову позначку.
Джефф Меркадо

21

Спробуйте це,

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


6
Різниця між цією відповіддю та обраною полягає в тому, що це рішення повертає рядок, а інший повертає знак.
Loïc Lopes

char отримати лише одного персонажа, але моє рішення може бути результатом більше, ніж ти хочеш.
Санджай Кумаар

1
Це була лише точність, оскільки тип може мати важливе значення відповідно до того, що ви хочете зробити з ним.
Loïc Lopes

18

Різниця між MyString[0]та MyString.ToCharArray()[0]полягає в тому, що колишній трактує рядок як масив лише для читання, а ToCharArray()створює новий масив. Перший буде швидшим (разом з легшим) майже для будь-якого місця, де він буде працювати, але ToCharArrayможе бути необхідним, якщо у вас є метод, який потребує прийняття масиву, або якщо ви хочете змінити масив.

Якщо рядок невідомо і не порожній, ви можете зробити:

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

який повертає char?або нульовий, або перший символ у рядку, як це доречно.


Дякуємо, що згадуєте char?як спосіб включити можливість "немає першого персонажа".
ToolmakerSteve

17

Ви можете використовувати LINQ

char c = mystring.FirstOrDefault()

Це буде дорівнює, '\0'якщо рядок порожній.


8

Або ви можете це зробити:

MyString[0];

6
@ Роберт, ні, я хочу його побачити ще раз, щоб бути впевненим!
jjnguy

1
Я просто не бачив таких перед моїм :)
james_bond

1
ніяких турбот. Я теж постійно це роблю. Я справді повільний друкар.
jjnguy

8

Просто ще один підхід:

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

5

Я думаю, ти це шукаєш MyString.ToCharArray()[0]

:)

Але ви також можете використовувати MyString[0].



0

Наступний приклад отримання першого символу з рядка може комусь допомогти

string anyNameForString = "" + stringVariableName[0];

0

Відповідь на ваше запитання НІ.

Правильним є MyString [положення символу]. Для вашого випадку MyString [0], 0 - ПЕРШИЙ символ будь-якого рядка.

Значення символу позначається символом "(одна цитата), так як це значення x символів записується як" x ".

Значення рядка позначається символом "(подвійна цитата), як це значення x string записується як" x ".

Тож метод Substring () також не повертає символ, метод Substring () повертає рядок !!!

Рядок - це масив символів, а останній символ повинен бути символом '\ 0' (null). У цьому різниця між символьним масивом та рядком (який є масивом символів з останнім символом як "кінцевим маркером рядка" '\ 0' null.

А також зауважте, що "x" НЕ РІВНЯТЬ "x". Тому що "x" - це насправді 'x' + '\ 0'.


0

У C # 8 ви можете використовувати діапазони.

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

Додайте ?після myStringобробки nullрядків.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.