Как получить первые пять символов строки


133

Я прочитал этот вопрос, чтобы получить первый символ строки. Есть ли способ получить первые n символов из строки в C #?


Предыдущий вопрос спрашивает о char** s, а вы спрашиваете о ** символах . Они не одно и то же. 𣊾и 𣇞два символа, которые мне нужно было использовать только вчера, что не удалось в программном обеспечении, написанном на C #, которое я использовал, потому что программист не знал разницы между a charи символом. Не попадитесь в эту ловушку!
hippietrail

Ответы:


218

Вы можете использовать Enumerable.Take как:

char[] array = yourStringVariable.Take(5).ToArray();

Или вы можете использовать String.Substring .

string str = yourStringVariable.Substring(0,5);

Помни что String.Substring может вызвать исключение в случае, если длина строки меньше требуемого символа.

Если вы хотите вернуть результат в виде строки, вы можете использовать:

  • Использование конструктора строк и LINQ Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

Плюс подхода - отсутствие проверки длины заранее.

  • Другой способ - использовать String.Substringс проверкой ошибок

лайк:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
строка val = новая строка (yourStringVariable.Take (6) .ToArray ()); но Substring выдаст ошибку, если длина yourStringVariable меньше 5
Moji

1
IsNullOrWhiteSpaceздесь неправильно. Рассмотрим строку с 10 пробелами - ваш код вернет все 10. Используйте IsNullOrEmptyвместо них. (Нехорошо совмещать IsNullOrWhiteSpaceс любым другим тестом; вместо этого тестируйте на null + empty, тогда, Trimесли это задано поведение, тогда выполняйте все необходимые тесты / операции.)
ToolmakerSteve

1
Вы можете сохранить вызов ToArray () с помощью String.Concat () следующим образом: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Вы можете использовать Substring (int startIndex, int length)

string result = str.Substring(0,5);

Подстрока начинается с указанной позиции символа и имеет указанную длину. Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку с длиной символов, начиная с позиции startIndex в текущей строке, MSDN.

Что делать, если исходная строка меньше пяти символов? Вы получите исключение, используя вышеуказанный метод. Мы можем поставить условие, чтобы проверить, превышает ли количество символов в строке 5, а затем получить первые пять через Substring. Обратите внимание, что я назначил исходную строку переменной firstFiveChar. FirstFiveChar не изменяется, если символов меньше 5, поэтому часть else не требуется.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

Никто не упомянул, как правильно проверять при использовании Substring() , поэтому я хотел внести свой вклад в это.

Если вы не хотите использовать Linqи продолжать Substring(), вы должны убедиться, что ваша строка больше, чем второй параметр (длина) Substring()функции.

Допустим, вам нужны первые 5 символов. Вы должны получить их после тщательной проверки, например:

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

Без этой проверки Substring() функция выдала бы исключение, потому что она перебирала бы буквы, которых нет.

Я думаю, вы поняли идею ...


прекрасная дополнительная информация
Rob85

Я рад, что тебе понравилось.
ilter

Это мне очень помогло, но не могли бы вы объяснить, что именно он делает в этой строке?
jimbob

Я бы проверил несколько примеров подстроки. Принимает параметры для индексов. Начальный индекс равен 0. Если вы напишете что-то большее (или меньшее, если на то пошло), чем последний индекс любого массива, вы получите исключение вне индекса. Эта проверка в примере предназначена для предотвращения этого исключения.
МСДЭНИ

Hahhahaha! :) Это был вопрос, на который я ответил. Должен ли я оставить этот вопрос без ответа? :)
МСДЭНИ

18

Проблема в .Substring(,)том, что вы должны быть уверены, что данная строка имеет длину не менее запрошенного количества символов, иначе ArgumentOutOfRangeExceptionбудет выброшено.

Решение 1 (с использованием «Подстроки»):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

Недостатком использования .Substring(является то, что вам нужно будет проверить длину данной строки.

Решение 2 (с помощью Take):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

Использование Take предотвратит необходимость проверки длины данной строки.


13

Используйте функцию PadRight, чтобы строка не была слишком короткой, возьмите то, что вам нужно, а затем обрежьте пробелы с конца одним оператором.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
На данный момент это лучшее решение. Использование только подстроки может вызвать ошибку, если длина строки меньше длины подстроки.
Асири Диссанаяка

лучшая альтернатива функции LEFT, которую мы используем в SQL Server
vibs2006,

11

Я не знаю, почему кто-то упомянул об этом. Но это самый короткий и простой способ добиться этого.

string str = yourString.Remove(n);

n - количество символов, которое вам нужно

пример

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
Внутренне это то же самое, что и this.Substring (0, 5), поэтому вам нужно убедиться, что строка имеет правильную длину.
PersyJack

В случае, если вам нужны первые n символов, это работает, только если вы знаете длину строки. Если длина может измениться, это не всегда сработает. Я знаю, что это, вероятно, очевидно для большинства, но просто
упомяну

10

Добавьте пять пробелов, затем удалите первые пять и обрежьте результат. Количество добавляемых пробелов должно совпадать с количеством, которое вы сокращаете. Не забудьте поставить скобки перед этим, .Substring(0,X)иначе ничего не добавите.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

С помощью этой техники вам не придется беспокоиться об ArgumentOutOfRangeExceptionупомянутом в других ответах.


1
черт возьми, я собирался опубликовать это !! upvoted. (это 2019 год, почему в строке не может быть метода, который выполнял бы то же самое, что Mid $ в 1985 году? Для тех, кто говорит: «Вы не должны этого делать», хорошо, напишите мой код для меня ... вам придется сделай это ...)
FastAl


6

Просто предупредите, что в C # 8.0 есть новый способ сделать это: операторы диапазона

Документы Microsoft

Или, как я люблю их называть, кусочки панды.

Старый способ:

string newString = oldstring.Substring(0, 5);

Новый способ:

string newString = oldstring[..5];

Что на первый взгляд кажется довольно плохим компромиссом между некоторой читабельностью в пользу более короткого кода, но новая функция дает вам

  1. стандартный синтаксис для нарезки массивов (и, следовательно, строк)
  2. крутые штуки вроде этого:

    var slice1 = список [2 .. ^ 3]; // список [Range.Create (2, Index.CreateFromEnd (3))]

    var slice2 = список [.. ^ 3]; // список [Range.ToEnd (Index.CreateFromEnd (3))]

    var slice3 = список [2 ..]; // список [Range.FromStart (2)]

    var slice4 = список [..]; // список [Range.All]


3

Чтобы получить первые n символов из строки в C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

Ниже приведен метод расширения, который проверяет, больше ли строка, чем было необходимо, сокращает строку до определенного максимального количества символов и добавляет '...'.

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

Я использую:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

или альтернативный вариант, если вы также хотите проверить наличие пробелов (а не только Null):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

Или вы можете использовать String.ToCharArray () .
Он принимает int startindexи и int lengthкак параметры и возвращаетchar[]

new string(stringValue.ToCharArray(0,5))

Вам все равно нужно будет убедиться, что строка имеет правильную длину, иначе она выдаст ArgumentOutOfRangeException


1

Пожалуйста, попробуйте этот код, если str меньше 5.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

Если нам нужны только первые 5 символов из любого поля, это может быть достигнуто с помощью атрибута Left.

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

Я пробовал приведенные выше ответы, и лучшее, что я думаю, - это

@item.First_Name.Substring(0,1)

В этом я мог бы получить первую букву строки

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.