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

94

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

Вход:

str = "hello world!";

Выход:

d!
csharper
источник
9
строка.Substring (9); где 9 - начальный индекс
Waqas
Не забудьте сначала проверить, что строка содержит не менее 10 символов, иначе вы получите исключение.
Джонатан
Почему подстрока не поддерживает (startIndex, endindex)? каждый раз, когда мы должны вычислять
длину
1
@Waqas: на самом деле это str.Substring (10), параметр - позиция, с которой начинается извлечение подстроки
Рэзван Флавий Панда

Ответы:

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

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

V4Vendetta
источник
218

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

или

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

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

Crlanglois
источник
16

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

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

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

UrbanEsc
источник
А для лучшей читаемости можно использовать "". В наши дни он компилируется точно так же, как 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);
   }
Snack'Eyes
источник
1

Используйте метод подстроки.

string s = "hello world";
s=s.Substring(10, s.Length-10);
Эшли Джон
источник
2
выдает исключение, если строка короче начального индекса
Рэзван Флавиус Панда
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();
}
l33t
источник