Быстрый и умный способ получить сегмент NON FIRST строки С#
Я делаю split(' ')
над строкой, и я хочу вытащить первый элемент возвращаемой строки, чтобы получить остальную часть строки.
f.e. "THIS IS AN AMAZING STRING".split(' ');
Я хочу получить все слова, кроме ЭТОГО. Это: УЖАСНАЯ СТРОКА
Строка всегда будет содержать по крайней мере одно пустое пространство между первым и вторым словом, потому что я положу его жестко закодированным
Есть ли функция, которая делает это?
спасибо
Ответы
Ответ 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);