Предположим, у меня есть строка:
"34234234d124"
Я хочу получить последние четыре символа этой строки, которая есть "d124"
. Я могу использовать SubString
, но для этого нужна пара строк кода, включая именование переменной.
Можно ли получить этот результат в одном выражении с помощью C #?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. Я надеюсь, что будущая версия C # сделает это так же просто."hello world"[^4..]
:-)Ответы:
Если вы уверены, что длина вашей строки не менее 4, то она еще короче:
источник
mystring
длина менее 4 символов.Вы можете использовать метод расширения :
А затем позвоните:
источник
Все, что вам нужно сделать, это ..
источник
Хорошо, я вижу, что это старый пост, но почему мы переписываем код, уже предоставленный в фреймворке?
Я бы предложил добавить ссылку на фреймворк DLL "Microsoft.VisualBasic"
источник
VisualBasic
пространство имен?TextFieldParser
это еще один пример. Почему эти утилиты так странно учтены?источник
Использование Substring на самом деле довольно короткое и читаемое:
источник
Вот еще одна альтернатива, которая не должна работать слишком плохо (из-за отложенного выполнения ):
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Хотя метод расширения для этой цели
mystring.Last(4)
, безусловно, является самым чистым решением, хотя и немного больше работы.источник
Reverse().Take(4).Reverse()
что не каждый перечисляет всю строку, это происходит только при последнемToArray
вызове. Если бы не было такой вещи, как отложенное выполнение, она бы перевела наReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Это, конечно, предполагает, что эти расширения являются отложенным типом - который я не проверял. Конструкторы String не принимают IEnumerable, поэтому вам нужно перечислить его в массив в этой точке.Вы можете просто использовать
Substring
метод C #. НапримерОн вернет результат 0000.
источник
startIndex
?Простое решение будет:
источник
источник
=
нет=+
.Это просто так:
источник
По сравнению с некоторыми предыдущими ответами основное отличие состоит в том, что этот фрагмент кода учитывается, когда входная строка:
Вот:
источник
Определение:
Использование:
Результат:
из
источник
Это не сработает для любой длины строки.
Вероятно, это излишне для выполняемой задачи, но если требуется дополнительная проверка, ее можно добавить в регулярное выражение.
Изменить: я думаю, что это регулярное выражение будет более эффективным:
источник
Используйте универсальный
Last<T>
. Это будет работать с ЛЮБОЙIEnumerable
, включая строку.И конкретный для строки:
источник
Я собрал некоторый код, модифицированный из различных источников, который получит желаемые результаты, а также многое другое. Я допустил отрицательные значения int, значения int, которые превышают длину строки, и конечный индекс меньше начального индекса. В последнем случае метод возвращает подстроку обратного порядка. Есть много комментариев, но дайте мне знать, если что-то неясно или просто сумасшедший. Я играл с этим, чтобы посмотреть, для чего все это я мог бы использовать.
Так что если у вас есть строка типа «Это метод расширения», вот несколько примеров и результатов, которые можно ожидать.
Надеюсь, эта версия будет полезна для кого-то. Он работает как обычно, если вы не используете отрицательные числа, и предоставляет значения по умолчанию для параметров вне диапазона.
источник
источник
Предполагая, что вы хотите строки между строкой, которая находится в 10 символах от последнего символа, и вам нужно всего 3 символа.
Скажем
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
В приведенном выше, мне нужно извлечь то,
"273"
что я буду использовать в запросе базы данныхисточник
Substring
уже позволяет передавать начальную точку и длину, поэтому не уверен, почему бы вам не использовать это вместо того,Remove
чтобы сначала удалить начало.Обновление 2020 : C # 8.0, наконец, делает это легко:
Вы также можете разрезать массивы таким же образом, см. Индексы и диапазоны .
источник