Предыдущий вопрос спрашивает о char** s, а вы спрашиваете о ** символах . Они не одно и то же. 𣊾и 𣇞два символа, которые мне нужно было использовать только вчера, что не удалось в программном обеспечении, написанном на C #, которое я использовал, потому что программист не знал разницы между a charи символом. Не попадитесь в эту ловушку!
строка val = новая строка (yourStringVariable.Take (6) .ToArray ()); но Substring выдаст ошибку, если длина yourStringVariable меньше 5
Moji
1
IsNullOrWhiteSpaceздесь неправильно. Рассмотрим строку с 10 пробелами - ваш код вернет все 10. Используйте IsNullOrEmptyвместо них. (Нехорошо совмещать IsNullOrWhiteSpaceс любым другим тестом; вместо этого тестируйте на null + empty, тогда, Trimесли это задано поведение, тогда выполняйте все необходимые тесты / операции.)
ToolmakerSteve
1
Вы можете сохранить вызов ToArray () с помощью String.Concat () следующим образом: string firstFivChar = String.Concat (yourStringVariable.Take (5));
Подстрока начинается с указанной позиции символа и имеет указанную длину. Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку с длиной символов, начиная с позиции startIndex в текущей строке,
MSDN.
Что делать, если исходная строка меньше пяти символов? Вы получите исключение, используя вышеуказанный метод. Мы можем поставить условие, чтобы проверить, превышает ли количество символов в строке 5, а затем получить первые пять через Substring. Обратите внимание, что я назначил исходную строку переменной firstFiveChar. FirstFiveChar не изменяется, если символов меньше 5, поэтому часть else не требуется.
Никто не упомянул, как правильно проверять при использовании Substring() , поэтому я хотел внести свой вклад в это.
Если вы не хотите использовать Linqи продолжать Substring(), вы должны убедиться, что ваша строка больше, чем второй параметр (длина) Substring()функции.
Допустим, вам нужны первые 5 символов. Вы должны получить их после тщательной проверки, например:
string title ="love"// 15 charactersvar firstFiveChars = title.Length<=5? title : title.Substring(0,5);// firstFiveChars: "love" (4 characters)
Без этой проверки Substring() функция выдала бы исключение, потому что она перебирала бы буквы, которых нет.
Это мне очень помогло, но не могли бы вы объяснить, что именно он делает в этой строке?
jimbob
Я бы проверил несколько примеров подстроки. Принимает параметры для индексов. Начальный индекс равен 0. Если вы напишете что-то большее (или меньшее, если на то пошло), чем последний индекс любого массива, вы получите исключение вне индекса. Эта проверка в примере предназначена для предотвращения этого исключения.
МСДЭНИ
Hahhahaha! :) Это был вопрос, на который я ответил. Должен ли я оставить этот вопрос без ответа? :)
МСДЭНИ
18
Проблема в .Substring(,)том, что вы должны быть уверены, что данная строка имеет длину не менее запрошенного количества символов, иначе ArgumentOutOfRangeExceptionбудет выброшено.
Решение 1 (с использованием «Подстроки»):
var firstFive = stringValue !=null?
stringValue.Substring(0, stringValue.Length>=5?5: stringValue.Length):null;
Недостатком использования .Substring(является то, что вам нужно будет проверить длину данной строки.
Решение 2 (с помощью Take):
var firstFive = stringValue !=null?string.Join("", stringValue.Take(5)):null;
Использование Take предотвратит необходимость проверки длины данной строки.
Внутренне это то же самое, что и this.Substring (0, 5), поэтому вам нужно убедиться, что строка имеет правильную длину.
PersyJack
В случае, если вам нужны первые n символов, это работает, только если вы знаете длину строки. Если длина может измениться, это не всегда сработает. Я знаю, что это, вероятно, очевидно для большинства, но просто
упомяну
10
Добавьте пять пробелов, затем удалите первые пять и обрежьте результат. Количество добавляемых пробелов должно совпадать с количеством, которое вы сокращаете. Не забудьте поставить скобки перед этим, .Substring(0,X)иначе ничего не добавите.
черт возьми, я собирался опубликовать это !! upvoted. (это 2019 год, почему в строке не может быть метода, который выполнял бы то же самое, что Mid $ в 1985 году? Для тех, кто говорит: «Вы не должны этого делать», хорошо, напишите мой код для меня ... вам придется сделай это ...)
Ниже приведен метод расширения, который проверяет, больше ли строка, чем было необходимо, сокращает строку до определенного максимального количества символов и добавляет '...'.
publicstaticclassStringExtensions{publicstaticstringEllipsis(thisstring s,int charsToDisplay){if(!string.IsNullOrWhiteSpace(s))return s.Length<= charsToDisplay ? s :newstring(s.Take(charsToDisplay).ToArray())+"...";returnString.Empty;}}
char
** s, а вы спрашиваете о ** символах . Они не одно и то же.𣊾
и𣇞
два символа, которые мне нужно было использовать только вчера, что не удалось в программном обеспечении, написанном на C #, которое я использовал, потому что программист не знал разницы между achar
и символом. Не попадитесь в эту ловушку!Ответы:
Вы можете использовать Enumerable.Take как:
Или вы можете использовать String.Substring .
Помни что
String.Substring
может вызвать исключение в случае, если длина строки меньше требуемого символа.Если вы хотите вернуть результат в виде строки, вы можете использовать:
Использование конструктора строк и LINQ
Take
Плюс подхода - отсутствие проверки длины заранее.
String.Substring
с проверкой ошибоклайк:
источник
IsNullOrWhiteSpace
здесь неправильно. Рассмотрим строку с 10 пробелами - ваш код вернет все 10. ИспользуйтеIsNullOrEmpty
вместо них. (Нехорошо совмещатьIsNullOrWhiteSpace
с любым другим тестом; вместо этого тестируйте на null + empty, тогда,Trim
если это задано поведение, тогда выполняйте все необходимые тесты / операции.)Пожалуйста попробуйте:
Проверить C # Substring , String.Substring Method
источник
Вы можете использовать Substring (int startIndex, int length)
Что делать, если исходная строка меньше пяти символов? Вы получите исключение, используя вышеуказанный метод. Мы можем поставить условие, чтобы проверить, превышает ли количество символов в строке 5, а затем получить первые пять через Substring. Обратите внимание, что я назначил исходную строку переменной firstFiveChar. FirstFiveChar не изменяется, если символов меньше 5, поэтому часть else не требуется.
источник
Никто не упомянул, как правильно проверять при использовании
Substring()
, поэтому я хотел внести свой вклад в это.Если вы не хотите использовать
Linq
и продолжатьSubstring()
, вы должны убедиться, что ваша строка больше, чем второй параметр (длина)Substring()
функции.Допустим, вам нужны первые 5 символов. Вы должны получить их после тщательной проверки, например:
Без этой проверки
Substring()
функция выдала бы исключение, потому что она перебирала бы буквы, которых нет.Я думаю, вы поняли идею ...
источник
Проблема в
.Substring(,)
том, что вы должны быть уверены, что данная строка имеет длину не менее запрошенного количества символов, иначеArgumentOutOfRangeException
будет выброшено.Решение 1 (с использованием «Подстроки»):
Недостатком использования
.Substring(
является то, что вам нужно будет проверить длину данной строки.Решение 2 (с помощью Take):
Использование Take предотвратит необходимость проверки длины данной строки.
источник
Используйте функцию PadRight, чтобы строка не была слишком короткой, возьмите то, что вам нужно, а затем обрежьте пробелы с конца одним оператором.
источник
Я не знаю, почему кто-то упомянул об этом. Но это самый короткий и простой способ добиться этого.
n
- количество символов, которое вам нужнопример
источник
Добавьте пять пробелов, затем удалите первые пять и обрежьте результат. Количество добавляемых пробелов должно совпадать с количеством, которое вы сокращаете. Не забудьте поставить скобки перед этим,
.Substring(0,X)
иначе ничего не добавите.С помощью этой техники вам не придется беспокоиться об
ArgumentOutOfRangeException
упомянутом в других ответах.источник
источник
Просто предупредите, что в C # 8.0 есть новый способ сделать это: операторы диапазона
Документы Microsoft
Или, как я люблю их называть, кусочки панды.
Старый способ:
Новый способ:
Что на первый взгляд кажется довольно плохим компромиссом между некоторой читабельностью в пользу более короткого кода, но новая функция дает вам
крутые штуки вроде этого:
var slice1 = список [2 .. ^ 3]; // список [Range.Create (2, Index.CreateFromEnd (3))]
var slice2 = список [.. ^ 3]; // список [Range.ToEnd (Index.CreateFromEnd (3))]
var slice3 = список [2 ..]; // список [Range.FromStart (2)]
var slice4 = список [..]; // список [Range.All]
источник
Чтобы получить первые n символов из строки в C #
источник
Ниже приведен метод расширения, который проверяет, больше ли строка, чем было необходимо, сокращает строку до определенного максимального количества символов и добавляет '...'.
источник
В C # 8.0 вы можете получить первые пять символов строки следующим образом
Вот еще немного информации об индексах и диапазонах
источник
Я использую:
или альтернативный вариант, если вы также хотите проверить наличие пробелов (а не только Null):
источник
Или вы можете использовать String.ToCharArray () .
Он принимает
int startindex
и иint length
как параметры и возвращаетchar[]
Вам все равно нужно будет убедиться, что строка имеет правильную длину, иначе она выдаст
ArgumentOutOfRangeException
источник
Пожалуйста, попробуйте этот код, если str меньше 5.
источник
Если нам нужны только первые 5 символов из любого поля, это может быть достигнуто с помощью атрибута Left.
источник
Попробуйте код ниже
источник
Я пробовал приведенные выше ответы, и лучшее, что я думаю, - это
В этом я мог бы получить первую букву строки
источник