
В этой заметке я покажу как в C# из исходной строки оставить только начальную часть не больше заданной длины.
К сожалению, в C# нет готового метода, который помог бы это сделать. Поэтому мы создадим свой метод расширения (extension method) для класса String.
Ниже представлен метод расшрения TruncateLongString()
, который не только позволяет указать максимально допустимое количество символов maxChars
, но и указать строку postfix
, которая будет добавлена к строке в случае ее обрезки:
public static string TruncateLongString(this string inputString, int maxChars, string postfix = "...") { if (maxChars <= 0) throw new ArgumentOutOfRangeException("maxChars"); if (inputString == null || inputString.Length < maxChars) return inputString; var truncatedString = inputString.Substring(0, maxChars) + postfix; return truncatedString; }
Таким образом:
Console.WriteLine("1234567890".TruncateLongString(5)); // Выводит "12345…" Console.WriteLine("1234567890".TruncateLongString(3, "")); // Выводит "123" Console.WriteLine("1234567890".TruncateLongString(15, "")); // Выводит "1234567890"
Еще одним вариантом реализации такой обрезки строки является учет слов. То есть, мы урезаем текст, но при этом не хотим обрывать его на половине слова:
public static string TruncateLongStringAtWord(this string inputString, int maxChars, string postfix = "...") { if (maxChars <= 0) throw new ArgumentOutOfRangeException("maxChars"); if (inputString == null || inputString.Length < maxChars) return inputString; var lastSpaceIndex = inputString.LastIndexOf(" ", maxChars); var substringLength = (lastSpaceIndex > 0) ? lastSpaceIndex : maxChars; var truncatedString = inputString.Substring(0, substringLength).Trim() + postfix; return truncatedString; }
Использование метода TruncateLongStringAtWord()
даст такие результаты:
Console.WriteLine("12 3 45 678 90".TruncateLongStringAtWord(5)); // Выводит "12 3..." Console.WriteLine("12 3 45 678 90".TruncateLongStringAtWord(10, "")); // Выводит "12 3 45" Console.WriteLine("1234567890".TruncateLongStringAtWord(5, "...<read more>")); // Выводит "12345...<read more>"