Какой метод в классе String возвращает только первые N символов?

Я хотел бы написать метод расширения для класса 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?

Ответ 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));
}

Ответ 2

string truncatedToNLength = new string(s.Take(n).ToArray());  

Это решение имеет крошечный бонус в том случае, если n больше, чем s.Length, оно все равно делает правильную вещь.

Ответ 3

Вы можете использовать LINQ str.Take(n) или str.SubString(0, n), где последний будет генерировать исключение ArgumentOutOfRangeException для n > str.Length.

Помните, что версия LINQ возвращает IEnumerable<char>, поэтому вам нужно будет преобразовать IEnumerable<char> в string: new string(s.Take(n).ToArray()).

Ответ 4

Всякий раз, когда мне приходится делать строковые манипуляции на С#, я пропускаю старые добрые функции 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);

Ответ 5

Просто:

public static String Truncate(String input,int maxLength)
{
   if(input.Length > maxLength)
      return input.Substring(0,maxLength);
   return input;
}

Ответ 6

public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}

Ответ 7

если мы говорим также о проверках, почему мы не проверяли нулевые записи строк. Любые конкретные причины?

Я думаю, что ниже, так как IsNullOrEmpty - это системный метод, а тернарные операторы имеют циклическую сложность = 1, а если() {} else {} имеет значение 2.

    public static string Truncate(string input, int truncLength)
    {
        return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
                   ? input.Substring(0, truncLength)
                   : input;
    }

Ответ 8

Я добавил это в свой проект только потому, что там, где я использую его, это высокая вероятность его использования в циклах, в проекте, размещенном в Интернете, поэтому я не хотел никаких сбоев, если бы мог это сделать. Длина соответствует столбцу, который у меня есть. Это С# 7

Всего одна строка:

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";

Ответ 9

substring(int startpos, int lenght);

Ответ 10

String.substring(0, п);//0 - начальный индекс и n - количество символов