Обрезка строки длиннее указанного количества символов в C#

Иконка Обрезка

В этой заметке я покажу как в 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>"

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>