String.Split только на первом разделителе в С#?
String.Split удобен для разбиения строки на несколько частей на разделителе.
Как мне перейти к разделению строки только на первом разделителе. Например. У меня есть строка
"Time: 10:12:12\r\n"
И я бы хотел, чтобы массив выглядел как
{"Time","10:12:12\r\n"}
Ответы
Ответ 1
Наилучший подход немного зависит от того, насколько гибким должен быть синтаксический анализ, в отношении возможных дополнительных пространств и тому подобного. Проверьте точные спецификации формата, чтобы узнать, что вам нужно.
yourString.Split(new char[] { ':' }, 2)
Ограничит вас двумя подстроками. Однако это не обрезает пространство в начале второй строки. Вы можете сделать это во второй операции после раскола.
yourString.Split(new char[] { ':', ' ' }, 2,
StringSplitOptions.RemoveEmptyEntries)
Должен работать, но будет разорван, если вы попытаетесь разбить имя заголовка, содержащее пробел.
yourString.Split(new string[] { ": " }, 2,
StringSplitOptions.None);
Будет делать то, что вы описываете, но на самом деле требует наличия пространства.
yourString.Split(new string[] { ": ", ":" }, 2,
StringSplitOptions.None);
Делает пространство необязательным, но вам все равно придется TrimStart()
в случае более чем одного пробела.
Чтобы формат был несколько гибким и ваш код читаем, я предлагаю использовать первый вариант:
string[] split = yourString.Split(new char[] { ':' }, 2);
// Optionally check split.Length here
split[1] = split[1].TrimStart();
Ответ 2
В приведенном выше примере вы можете разделить на ":" (т.е. двоеточие с конечным пространством), поскольку это похоже на то, что вы сделали. Если вы действительно разделили только на первый делиметр, вы увидели бы ведущее место в вашем втором элементе массива.
Однако вам, вероятно, стоит посмотреть на эту перегрузку Split...
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split(
char[] separator,
int count
)
..., который позволяет указать максимальное количество подстрок.
Ответ 3
?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2,
StringSplitOptions.RemoveEmptyEntries)
{Dimensions:[2]}
[0]: "Time"
[1]: "10:12:12\r\n"
другие параметры:
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2)
{Dimensions:[2]}
[0]: "Time"
[1]: " 10:12:12\r\n"
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1)
{Dimensions:[1]}
[0]: "Time: 10:12:12\r\n"
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3)
{Dimensions:[3]}
[0]: "Time"
[1]: " 10"
[2]: "12:12\r\n"
Ответ 4
Я принял вариант ответа Торарина выше,
Нижеследующее должно быть в состоянии справиться с вашим требованием, а также обрезать пробелы.
yourString.Split(new []{'-'},2).Select(s => s.Trim())