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] должно быть достаточно

aqwert
источник
51
Не стоит ли потратить эти лишние пять секунд, набрав слова «должно быть достаточно».
Роберт Харви
Кто первым ответил на этот вопрос?
Крейг Джонстон
Выберите самую старую вкладку, чтобы увидеть, что это как Мэтью
Джон
10
@johnc: или лучше, наведите курсор на отметку времени.
Джефф Меркадо
22

Попробуй это,

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

Санджай Кумаар
источник
6
Разница между этим ответом и выбранным в том, что это решение возвращает строку, а другой возвращает символ.
Лоик Лопес
char получает только один символ, но мое решение может привести к нескольким, если хотите.
Санджай Кумаар
1
Это была просто точность, так как тип может иметь значение в зависимости от того, что вы хотите с ним делать.
Лоик Лопес
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));
knkarthick24
источник
5

Я думаю, что вы ищете это MyString.ToCharArray()[0]

:)

Но вы MyString[0]тоже можете использовать .

Nayan
источник
1

Следующий пример получения первого символа из строки может помочь кому-то

string anyNameForString = "" + stringVariableName[0];
Ибрагим Икбал
источник
0

MyString.Remove (1, 2); также работает

Клинт Гэйдон
источник
0

Ответ на ваш вопрос НЕТ.

Правильным является MyString [позиция персонажа]. В вашем случае MyString [0], 0 является ПЕРВЫМ символом любой строки.

Символьное значение обозначается как «(одинарная кавычка), как это символьное значение x записывается как« x ».

Строковое значение обозначается "(двойная кавычка), как это значение x строки записывается как" x ".

Поэтому метод Substring () также не возвращает символ, метод Substring () возвращает строку !!!

Строка - это массив символов, и последний символ должен быть символом '\ 0' (нулевым). Это разница между массивом символов и строкой (который представляет собой массив символов с последним символом как «маркер конца строки» '\ 0', равным нулю).

А также обратите внимание, что «х» не равно «х». Потому что «х» на самом деле «х» + «\ 0».

Биддут Митра
источник
0

В C # 8 вы можете использовать диапазоны.

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

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

Дмитрий Сергеевич
источник
-2

получение символа из строки может зависеть от конца (строка по умолчанию - 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);
user2849180
источник
2
Как это ответ?
Нилеш