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.