Как удалить первые 10 символов из строки?


94

Как игнорировать первые 10 символов строки?

Вход:

str = "hello world!";

Выход:

d!

9
строка.Substring (9); где 9 - начальный индекс
Waqas

Не забудьте сначала проверить, что строка содержит не менее 10 символов, иначе вы получите исключение.
Джонатан

Почему подстрока не поддерживает (startIndex, endindex)? каждый раз, когда мы должны вычислять
длину

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

Ответы:


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

вам нужно будет выполнить проверку длины, иначе это вызовет ошибку


218

str = str.Remove(0,10); Удаляет первые 10 символов

или

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

Для ваших целей они должны работать одинаково.


16

Подстрока, вероятно, то, что вы хотите, как указывали другие. Но просто чтобы добавить еще один вариант ...

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

Вам даже не нужно проверять длину на этом! :) Если его меньше 10 символов, вы получите пустую строку.


А для лучшей читаемости можно использовать "". В наши дни он компилируется точно так же, как string.Empty.
PRMan

Это не так, "" создает новую строку, а string.Empty ссылается на нее. Это не имеет особого значения с точки зрения производительности (я имею в виду, что это одна пустая строка, так что да ...), но просто хотел указать на это :)
Zer0

"" действительно не создает новую строку, см. здесь stackoverflow.com/a/263257/604613
UrbanEsc

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

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

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

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


1

Вы можете использовать метод Substring, который принимает единственный параметр, который является индексом для начала.

В моем коде ниже я имею дело со случаем, когда длина меньше желаемого начального индекса и когда длина равна нулю.

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.