Як отримати перші п’ять символів рядка


133

Я прочитав це запитання, щоб отримати перший заголовок рядка. Чи є спосіб отримати перше n число символів з рядка в C #?


Попереднє запитання - це про char** s, а ви запитуєте про ** s. Вони не одне і те ж. 𣊾і 𣇞це два символи, які мені потрібно було використати лише вчора, які не вдалися до програмного забезпечення, написаного на C #, який я використовував, оскільки програміст не знав різниці між charсимволом "a". Не потрапляйте в цю пастку!
hippietrail

Відповіді:


218

Ви можете використовувати Enumerable. Вважайте :

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

Або ви можете використовувати String.Substring .

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

Пам’ятайте, що String.Substringможе викинути виняток у випадку, якщо довжина рядка менша за потрібні символи.

Якщо ви хочете повернути результат в рядку, ви можете використовувати:

  • Використання String Constructor та LINQ's 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 помилиться, якщо довжина вашоїStringVariable менше 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, а потім отримаємо перші п'ять через підрядку. Примітка. Я призначив джерельну рядок змінній firstFiveChar. ПершийFiveChar не змінюється, якщо символів менше 5, тому інша частина не потрібна.

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. Якщо ви пишете що-небудь більше (або менший для цього питання), ніж останній індекс будь-якого масиву, ви отримаєте виключення з індексу. Ця перевірка в прикладі призначена для уникнення цього винятку.
ilter

Хахахаха! :) На це питання я відповів. Чи повинен я залишити це питання без відповіді? :)
МСДЕНІ

18

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

Рішення 1 (використовуючи "Підрядку"):

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

Недолік використання .Substring(полягає в тому, що вам потрібно перевірити довжину заданого рядка.

Рішення 2 (використовуючи "Візьми"):

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 символів, це працює, лише якщо ви знаєте довжину рядка. Якщо довжина може змінитися, це не завжди буде працювати. Я знаю, що це, мабуть, очевидно для більшості, але просто згадуючи це для кожного, хто проходить мимо ...
user1289451

10

Додайте п'ять символів пробілу, потім відріжте перші п’ять і обріжте результат. Кількість пробілів, які ви додаєте, повинна відповідати номеру, який ви вирізаєте. Не забудьте включити дужки до цього, .Substring(0,X)або ви нічого не додасте.

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

За допомогою цієї методики вам не доведеться турбуватися про ArgumentOutOfRangeExceptionзгадане в інших відповідях.


1
чорт я збирався відправити повідомлення !! прихильний. (це 2019 рік, чому не може бути методу на рядок, який робить те, що робив середній долар у 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);

або альтернативу, якщо ви також хочете перевірити на Whitespace (замість лише Null):

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

1

Або ви можете використовувати String.ToCharArray () .
Він приймає int startindexі int lengthяк параметри і повертає achar[]

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

Вам все-таки потрібно переконатися, що рядок має належну довжину, інакше вона викине a ArgumentOutOfRangeException


1

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

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

0

Якщо ми хочемо лише перших 5 символів з будь-якого поля, то цього можна досягти за допомогою лівого атрибута

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.