String.Split зручно розділяти рядок з кількома частинами на роздільник.
Як мені продовжувати ділити рядок лише на першому роздільнику. Наприклад, я маю струну
"Time: 10:12:12\r\n"
І я хотів би мати масив, схожий на
{"Time","10:12:12\r\n"}
String.Split зручно розділяти рядок з кількома частинами на роздільник.
Як мені продовжувати ділити рядок лише на першому роздільнику. Наприклад, я маю струну
"Time: 10:12:12\r\n"
І я хотів би мати масив, схожий на
{"Time","10:12:12\r\n"}
:від Timeі в будь-якому випадку, а не те, про що просили
Відповіді:
Найкращий підхід дещо залежить від того, наскільки гнучким ви хочете, щоб був синтаксичний аналіз, з урахуванням можливих зайвих пробілів тощо. Перевірте точні специфікації формату, щоб побачити, що вам потрібно.
yourString.Split(new char[] { ':' }, 2)
Обмежить вас двома 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();
.Select(s=> s.Trim())саме так я часто
У наведеному вище прикладі ви можете розділити ":" (тобто двокрапку з кінцевим пробілом), оскільки це, здається, те, що ви зробили. Якщо ви дійсно поділилися лише на перший деліметр, ви побачите провідний пробіл у другому елементі масиву.
Однак, мабуть, варто поглянути на це перевантаження Спліту ...
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split(
char[] separator,
int count
)
... що дозволяє вказати максимальну кількість підрядків.
?("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"
Я прийняв варіацію відповіді Тораріна вище: Нижче слід мати можливість обробляти ваші вимоги, а також обрізати пробіли.
yourString.Split(new []{'-'},2).Select(s => s.Trim())