Подтвердить что ты не робот

Быстрый и умный способ получить сегмент NON FIRST строки С#

Я делаю split(' ') над строкой, и я хочу вытащить первый элемент возвращаемой строки, чтобы получить остальную часть строки.

f.e. "THIS IS AN AMAZING STRING".split(' ');

Я хочу получить все слова, кроме ЭТОГО. Это: УЖАСНАЯ СТРОКА

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

Есть ли функция, которая делает это? спасибо

4b9b3361

Ответ 1

попробовать

string X = "THIS IS AN AMAZING STRING";
string Y = (X.IndexOf ( " " ) < 0) ? string.Empty : X.Substring (X.IndexOf ( " " )  + 1); // Y = IS AN AMAZING STRING

В соответствии с комментарием (IF X гарантированно является допустимой строкой с хотя бы одним пробелом) более простая версия без проверки и т.д.:

string Y = X.Substring (X.IndexOf ( " " )  + 1); 

Ответ 2

Достаточно неплохой вариант:

string original = "THIS IS AN AMAZING STRING";
string[] split = original.Split(new []{' '}, 2);
string result = split[1];

Обратите внимание, что если вы просто хотите получить результирующую строку, вы можете сократить это:

var result = original.Split(new []{' '}, 2)[1];

Используя перегрузку string.Split, которая принимает максимальное количество разделов, вы избегаете необходимости объединения, а также дополнительных накладных расходов.

Ответ 3

var a = "THIS IS AN AMAZING STRING".Split(' ');
string amazing = String.Join(" ", a.Skip(1));

Если вы находитесь на pre -.NET 4, вам нужно вставить конец .ToArray() в конце пропущенного вызова - потому что перегрузка String.Join, которая перечислима как второй параметр, была впервые добавлена ​​в .NET 4.

Хотя это хорошо работает в общем случае, если вы всегда хотите удалить только первое слово, есть лучший способ сделать это, как указал Рид в комментариях:

var a = "THIS IS AN AMAZING STRING".Split(new char[] {' ' }, 2);
string amazing = a[1];  //Perhaps do a length check first if you are not sure there is a space in the original string.

Это лучше работает для больших строк, так как Split нужно смотреть только до тех пор, пока не найдет первое пространство, а затем может создать результат только с двумя строками - и он избежит String.Join, который также может быть дорогим, особенно для более длинных строки.

Ответ 4

НЕ используйте функцию Split - a) она ищет каждый символ ' ', а не только первый. б) этот подход будет включать в себя много копий данных в памяти, что довольно медленная операция для строк.

var a = "THIS IS AN AMAZING STRING";
string result;
var index = a.IndexOf(' ');
if (index == -1)
    result = null;
else
    result = a.Substring(index + 1);

Поскольку заголовок вопроса упоминает массив, а не строку, стоит упомянуть класс ArraySegment - это позволяет создавать указатель на часть массива (без создания нового массива и копирования данных):

var a = new int[] { 0, 1, 2, 3 };
var segment = new ArraySegment<int>(a, 1, a.Length - 1);

Ответ 5

Очень просто:

string input = "THIS IS AN AMAZING STRING";
string result = input.Substring(input.IndexOf(' ') + 1);

Это будет работать для типа ввода, который вы указываете (где всегда есть пробел между двумя первыми словами в вашей строке), но для случая, когда входная строка вообще не имеет пробелов, она возвращает целое string as-is.

Ответ 6

Попробуйте это

  string str = "THIS IS AN AMAZING STRING";
  string firstString = str.Split(' ')[0];  //get the first string
  string newStr = str.Replace(firstString + " ", "");  //remove the first string

  //OR

  string newStr = str.Remove(0, firstString.Length + 1);