Як видалити перші 10 символів із рядка?


93

Як ігнорувати перші 10 символів рядка?

Вхідні дані:

str = "hello world!";

Вихід:

d!

9
string.Substring (9); де 9 - індекс початку
— Waqas

Не забудьте спочатку перевірити, що рядок має принаймні 10 символів, інакше ви отримаєте виняток.
— Джонатан,

Чому підрядок не підтримує (startIndex, endindex)? кожного разу, коли нам доводиться обчислювати довжину .. :-(
— Санграм Нандхіле

1
@Waqas: насправді це str.Substring (10), параметром є позиція, з якої починається витяг підрядка
— Резван Флавій Панда

Відповіді:


94
str = "hello world!";
str.Substring(10, str.Length-10)

Вам потрібно буде виконати перевірку довжини, інакше це призведе до помилки


215

str = str.Remove(0,10); Видаляє перші 10 символів

або

str = str.Substring(10); Створює підрядок, починаючи з 11-го символу до кінця рядка.

Для ваших цілей вони повинні працювати однаково.


16

Підрядки - це, мабуть, те, що ви хочете, як вказували інші. Але просто щоб додати ще один варіант до суміші ...

string result = string.Join(string.Empty, str.Skip(10));

Вам навіть не потрібно перевіряти довжину на цьому! :) Якщо менше 10 символів, ви отримуєте порожній рядок.


А для кращої читабельності ви можете використовувати "". Він компілюється точно так само, як і рядок. Порожньо в наші дні.
— PRMan

Це не робить, "" створює новий рядок, а рядок. Порожні посилання на один. Це насправді не має значення з точки зору продуктивності (я маю на увазі це один порожній рядок, так що так ...), але просто хотів зазначити це :)
— Zer0

11

Substring має два методи перевантаження:

public string Substring(int startIndex);//The substring starts at a specified character position and continues to the end of the string.

public string Substring(int startIndex, int length);//The substring starts at a specified character position and taking length no of character from the startIndex.

Отже, для цього сценарію ви можете використовувати перший метод, наведений нижче:

var str = "hello world!";
str = str.Substring(10);

Тут виводиться:

d!

Якщо ви можете застосувати захисне кодування, перевіривши його довжину.


6

Параметр Substringмає параметр startIndex. Встановіть його відповідно до індексу, з якого ви хочете почати.


3

Ви можете видалити Char, використовуючи нижній рядок,

: - Спочатку перевірте, чи має рядок достатньо символів для видалення , наприклад

   string temp="Hello Stack overflow";
   if(temp.Length>10)
   {
    string textIWant = temp.Remove(0, 10);
   }


1

Ви можете використовувати метод Substring method, який приймає один параметр, який є індексом, з якого починається.

У моєму коді нижче я розглядаю справу, якщо довжина менша за бажаний індекс початку і коли довжина дорівнює нулю.

string s = "hello world!";
s = s.Substring(Math.Max(0, Math.Min(10, s.Length - 1)));

в даний час він повертає останній символ із рядка, якщо рядок менше 10 символів.
— Резван Флавій Панда

1

Для:

var str = "hello world!";

Щоб отримати отриманий рядок без перших 10 символів і порожній рядок, якщо рядок менше або дорівнює 10 довжиною, ви можете використовувати:

var result = str.Length <= 10 ? "" : str.Substring(10);

або

var result = str.Length <= 10 ? "" : str.Remove(0, 10);

Перший варіант є кращим, оскільки йому потрібен лише один параметр методу.


1

Немає необхідності вказувати довжину Substringметоду. Тому:

string s = hello world;
string p = s.Substring(3);

p буде:

"ось світ".

Єдиний виняток, на який вам потрібно вжити, - це ArgumentOutOfRangeExceptionякщо startIndexменше нуля або більше довжини цього екземпляра.


0

Починаючи з C # 8, ви просто можете використовувати Range Operator. Це більш ефективний та кращий спосіб вирішення таких випадків.

string AnString = "Hello World!";
AnString = AnString[10..];

C# 8не підтримується при націлюванні .NET Framework.
— l33t

0

Виклик SubString()виділяє новий рядок. Для оптимальної роботи слід уникати зайвого розподілу. Починаючи з C# 7.2ви можете скористатися Span шаблоном .

При націлюванні .NET Frameworkвключайте пакет System.Memory NuGet . Для .NET Coreпроектів це працює нестандартно.

static void Main(string[] args)
{
    var str = "hello world!";
    var span = str.AsSpan(10); // No allocation!

    // Outputs: d!
    foreach (var c in span)
    {
        Console.Write(c);
    }

    Console.WriteLine();
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.