Я хотел бы написать метод расширения для String
класса, чтобы, если входная строка длиннее указанной длины N
, N
отображались только первые символы.
Вот как это выглядит:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
Какой String.*()
метод я могу использовать, чтобы получить только первые N
символы str
?
startIndex > (this.Length - length)
бросаетArgumentOutOfRangeException
.Math.Min(str.Length, maxLength) == str.Length
в итоге вы создаете ненужную строку для возврата «первых символов str.Length строки str», но Substring выполняет эту проверку для вас и просто делает,return this
если вы запросили всю строку.Это решение имеет крошечный бонус в том, что если n больше s.Length, оно по-прежнему работает правильно.
источник
Вы можете использовать LINQ
str.Take(n)
илиstr.SubString(0, n)
, где последний будет генерироватьArgumentOutOfRangeException
исключение дляn > str.Length
.Ум , что версия LINQ возвращает
IEnumerable<char>
, поэтому вам придется конвертироватьIEnumerable<char>
вstring
:new string(s.Take(n).ToArray())
.источник
Всякий раз , когда я должен делать со строками в C #, я скучаю старый добрый
Left
иRight
функции из Visual Basic, которые намного проще в использовании , чемSubstring
.Поэтому в большинстве моих проектов на C # я создаю методы расширения для них:
Примечание
.
Math.Min
Часть существует потому, чтоSubstring
выбрасывает,ArgumentOutOfRangeException
когда длина входной строки меньше запрашиваемой длины, как уже упоминалось в некоторых комментариях к предыдущим ответам.Использование:
источник
public static string Left(this string str, int length) { var Result = str.Substring(0, Math.Min(length, str.Length)); return (Result.Length < length) ? Result.PadRight(length) : Result; }
str
нужно проверить на нульПросто:
источник
источник
str == null || str.Length <= maxLength
Remove
илиSubstring
нет, нет никакой разницы.Remove(maxLength)
просто звонитSubstring(0,maxLength)
после небольшой проверки границ. То, что вы предпочитаете, зависит от того, считаете ли вы усечение «взять первые символы maxLength» или «выбросить все после символов maxLength». Конечно, это действительно так, так что решать вам.если мы говорим о проверках также, почему мы не проверили на пустые строковые записи. Какие-то конкретные причины?
Ниже приведена справка, поскольку IsNullOrEmpty является системным методом, а троичные операторы имеют цикломатическую сложность = 1, тогда как if () {} else {} имеет значение 2.
источник
Я добавил это в свой проект только потому, что там, где я его использую, высока вероятность того, что он будет использован в циклах, в проекте, размещенном в Интернете, поэтому я не хотел никаких сбоев, если бы мог управлять им. Длина соответствует столбцу, который у меня есть. Это C # 7
Всего одна строка:
источник
Метод .NET Substring таит в себе опасность. Я разработал методы расширения, которые обрабатывают широкий спектр сценариев. Приятно, что он сохраняет исходное поведение, но когда вы добавляете дополнительный «истинный» параметр, он затем обращается к методу расширения для обработки исключения и возвращает большинство логических значений, основанных на индексе и длине. Например, если длина отрицательна и считается в обратном направлении. Вы можете посмотреть результаты теста с различными значениями на скрипке по адресу: https://dotnetfiddle.net/m1mSH9 . Это даст вам четкое представление о том, как он разрешает подстроки.
Я всегда добавляю эти методы ко всем своим проектам, и мне никогда не нужно беспокоиться о взломе кода, потому что что-то изменилось и индекс недействителен. Ниже приведен код.
Я писал об этом в мае 2010 года по адресу: http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html
источник
Частично ради суммирования (исключая решение LINQ), вот два однострочника, которые обращаются к
int maxLength
предостережению о разрешении отрицательных значений, а также к случаю пустой строки:Substring
Путь (от ответа Павла Ruane в ):Remove
Путь (от ответа kbrimington в ):источник
источник
String.substring (0, п); // 0 - начальный индекс и n - количество символов
источник