Ответ 1
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str))
return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
Я хотел бы написать метод расширения для класса 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
?
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str))
return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
string truncatedToNLength = new string(s.Take(n).ToArray());
Это решение имеет крошечный бонус в том случае, если 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())
.
Всякий раз, когда мне приходится делать строковые манипуляции на С#, я пропускаю старые добрые функции Left
и Right
из Visual Basic, которые намного проще использовать, чем Substring
.
Поэтому в большинстве моих проектов С# я создаю для них методы расширения:
public static class StringExtensions
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
return str.Substring(str.Length - Math.Min(length, str.Length));
}
}
Примечание:
Часть Math.Min
существует, потому что Substring
выбрасывает ArgumentOutOfRangeException
, когда длина входной строки меньше запрашиваемой длины, как уже упоминалось в некоторых комментариях в предыдущих ответах.
string longString = "Long String";
// returns "Long";
string left1 = longString.Left(4);
// returns "Long String";
string left2 = longString.Left(100);
Просто:
public static String Truncate(String input,int maxLength)
{
if(input.Length > maxLength)
return input.Substring(0,maxLength);
return input;
}
public static string TruncateLongString(this string str, int maxLength)
{
return str.Length <= maxLength ? str : str.Remove(maxLength);
}
если мы говорим также о проверках, почему мы не проверяли нулевые записи строк. Любые конкретные причины?
Я думаю, что ниже, так как IsNullOrEmpty - это системный метод, а тернарные операторы имеют циклическую сложность = 1, а если() {} else {} имеет значение 2.
public static string Truncate(string input, int truncLength)
{
return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
? input.Substring(0, truncLength)
: input;
}
Я добавил это в свой проект только потому, что там, где я использую его, это высокая вероятность его использования в циклах, в проекте, размещенном в Интернете, поэтому я не хотел никаких сбоев, если бы мог это сделать. Длина соответствует столбцу, который у меня есть. Это С# 7
Всего одна строка:
public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";
substring(int startpos, int lenght);
String.substring(0, п);//0 - начальный индекс и n - количество символов