Я хотел бы усечь строку так, чтобы ее длина не превышала заданное значение. Я пишу в таблицу базы данных и хочу убедиться, что значения, которые я пишу, соответствуют ограничению типа данных столбца.
Например, было бы хорошо, если бы я мог написать следующее:
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
К сожалению, это вызывает исключение, потому что maxLength
обычно превышает границы строки value
. Конечно, я мог написать функцию, подобную следующей, но я надеялся, что нечто подобное уже существует.
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
Где неуловимый API, который выполняет эту задачу? Есть один?
StringBuilder
касается примечания, позволяет обрезать путем сокращения длины, но вам все равно необходимо выполнить проверку длины, чтобы избежать расширения строки..Trim()
таким образом, что это вводит в заблуждение, как будто мутирует строку: «Удаляет все начальные и конечные пробельные символы из текущий объект String. "Ответы:
К
Truncate()
сожалению, метода для строки не существует. Вы должны написать такую логику самостоятельно. Однако вы можете заключить это в метод расширения, чтобы вам не приходилось дублировать его везде:Теперь мы можем написать:
источник
maxLength
отрицательное значение.Или вместо троичного оператора вы можете использовать Math.min
источник
value.Substring(0, value.Length)
.maxLength
отрицательное значение.maxLength
чтобы0
илиvalue.Length
; или мне нужно броситьArgumentOutOfRangeException
..., который имеет больше смысла в этом случае, и все равно уже брошенSubstring
.return string.IsNullOrEmpty(value) ? value : value.Substring(0, Math.Min(value.Length, maxLength));
Я подумал, что добавлю свою реализацию, так как считаю, что она охватывает все случаи, которые были затронуты другими, и делает это в сжатой форме, которая все еще читаема.
Это решение в основном опирается на решение Рэя и открывает метод для использования в качестве метода расширения путем использования этого ключевого слова так же , как LBushkin делает в своем решении.
источник
maxLength
отрицательное значение.Потому что тестирование производительности это весело: (используя методы расширения linqpad )
truncate
Метод был «значительно» быстрее. #microoptimizationРано
поздно
Слишком долго
источник
В .NET 4.0 вы можете использовать
Take
метод:Не проверено на эффективность!
источник
Вы можете использовать LINQ ... это избавляет от необходимости проверять длину строки. Правда, возможно, не самый эффективный, но это весело.
или
источник
Я сделал мой в одной строке вроде этого
источник
Кажется, никто еще не опубликовал это:
Использование оператора && делает его немного лучше, чем принятый ответ.
источник
.NET Framework имеет API для усечения строки, подобной этой:
Но в приложении на C # вы, вероятно, предпочтете свернуть свое собственное, чем брать зависимость от Microsoft.VisualBasic.dll, основным смыслом которой является обратная совместимость.
источник
Microsoft.VisualBasic.Strings
модули в .NET Core довольно пусты .Другое решение:
источник
Я знаю, что это старый вопрос, но вот хорошее решение:
Возвращает: привет ...
источник
Аналогичный вариант с оператором распространения C # 6 Null
Пожалуйста, обратите внимание, что мы по существу проверяем,
value
является ли значение null здесь дважды.источник
По-прежнему нет метода усечения в 2016 году для строк C #. Но - используя синтаксис C # 6.0:
Работает как часы:
источник
Взяв @CaffGeek и упростив его:
источник
Обратите внимание, что усечение строки не просто означает просто обрезку строки только на заданную длину, но должно заботиться о том, чтобы не разбить слово.
например, строка: это тестовая строка.
Я хочу сократить это в 11. Если мы используем любой из методов, указанных выше, результат будет
это т
Это не то, что мы хотим
Метод, который я использую, также может быть не таким идеальным, но он может справиться с большинством ситуаций.
источник
Почему бы нет:
то есть в
value.Length < maxLength
пробелах места для пробелов до конца или усекать лишнее.источник
На всякий случай, если здесь недостаточно ответов, вот мой :)
использовать:
источник
Ради (чрезмерной) сложности я добавлю свою перегруженную версию, которая заменяет последние 3 символа многоточием по отношению к параметру maxLength.
источник
Мои два цента с примером длины 30:
источник
Я предпочитаю ответ jpierson, но ни один из приведенных здесь примеров не обрабатывает недопустимый параметр maxLength, например, когда maxLength <0.
Выбор будет либо обрабатывать ошибку в try / catch, ограничивать параметр maxLength min до 0, либо, если maxLength меньше 0, возвращать пустую строку.
Неоптимизированный код:
источник
Вот решение vb.net, отметьте, что оператор if (хотя и уродливый) повышает производительность, потому что нам не нужен оператор substring, когда строка уже меньше maxlength ... Делая это расширением строки, его легко использовать. ..
источник
Я знаю, что уже есть тонна ответов, но мне нужно было сохранить начало и конец строки без изменений, но сократить их до максимальной длины.
Это предназначено для создания URL-адресов SharePoint длиной не более 260 символов.
Я не сделал длину параметром, так как она является постоянной величиной 260. Я также не сделал первую длину подстроки параметром, потому что я хочу, чтобы она ломалась в определенной точке. Наконец, вторая подстрока - это длина источника - 20, поскольку я знаю структуру папок.
Это может быть легко адаптировано к вашим конкретным потребностям.
источник
Я знаю, что здесь уже есть тонна ответов, но это тот, с которым я ушел, который обрабатывает как нулевые строки, так и ситуацию, когда передаваемая длина отрицательна:
источник
В C # 8 может быть использована новая функция диапазонов ...
источник
В этом нет ничего, что мне известно, - вот моя версия, которая добавляет «...»:
источник
TruncateString
источник
В дополнение к рассмотренным выше возможностям я хотел бы поделиться своим решением. Это метод расширения, который позволяет null (возвращает string.Empty), а также есть второй .Truncate () для его использования с многоточием. Осторожно, это не оптимизированная производительность.
источник
источник
ToArray()
Вызов здесь просто само собой накладные расходы; используя, например,String.Concat
вы можете создать строку из множества символов без необходимости проходить через массив.Усеченная строка
источник
Это код, который я обычно использую:
источник