Какой метод в классе String возвращает только первые N символов? - PullRequest
168 голосов
/ 25 августа 2010

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

Ответы [ 10 ]

340 голосов
/ 25 августа 2010
public static string TruncateLongString(this string str, int maxLength)
{
    if (string.IsNullOrEmpty(str))
        return str;
    return str.Substring(0, Math.Min(str.Length, maxLength));
}
55 голосов
/ 25 августа 2010
string truncatedToNLength = new string(s.Take(n).ToArray());  

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

30 голосов
/ 25 августа 2010

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

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

11 голосов
/ 24 октября 2013

Просто:

public static String Truncate(String input,int maxLength)
{
   if(input.Length > maxLength)
      return input.Substring(0,maxLength);
   return input;
}
10 голосов
/ 26 мая 2017

Всякий раз, когда мне приходится выполнять строковые манипуляции в C #, я скучаю по старым добрым функциям Left и Right из Visual Basic, которые гораздо проще использовать, чем Substring.

Поэтому в большинстве моих проектов на C # я создаю методы расширения для них:

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 голосов
/ 25 августа 2010
public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}
4 голосов
/ 18 декабря 2013

, если мы говорим о проверках, а также о том, почему мы не проверили наличие пустых записей. Какие-то конкретные причины?

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

    public static string Truncate(string input, int truncLength)
    {
        return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
                   ? input.Substring(0, truncLength)
                   : input;
    }
1 голос
/ 18 мая 2018

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

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

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";
0 голосов
/ 30 сентября 2013

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

0 голосов
/ 25 августа 2010
substring(int startpos, int lenght);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...