Ручная строка, разделенная на С#
В моем коде я пытаюсь манипулировать строкой:
Some text - 04.09.1996 - 40-18
Я хотел бы разбить это на три подстроки: Some text
, 04.09.1996
и 40-18
.
Когда я использую метод Split
с дефисом в качестве разделителя, возвращаемое значение представляет собой массив из четырех строк: Some text
, 04.09.1996
, 40
и 18
. Как я могу заставить этот код работать, как описано выше?
Спасибо.
Ответы
Ответ 1
Вы должны просто разбить пробелы вокруг -
:
.Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);
См. демонстрация С#
var res = "Some text - 04.09.1996 - 40-18".Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var s in res)
Console.WriteLine(s);
Результат:
Some text
04.09.1996
40-18
Ответ 2
Используйте эту перегрузку разделения строк, чтобы получить только 3 части:
var s = "Some text - 04.09.1996 - 40-18";
var parts = s.Split(new[] { '-' }, 3);
Я предполагаю, что вы также хотите обрезать пробелы:
var parts = s.Split(new[] { '-' }, 3)
.Select(p => p.Trim());
Ответ 3
Я бы опасался появления "-" или "-" в "Некотором тексте", поскольку я предполагаю, что вас интересует это как владелец места. Если вы уверены, что "Некоторый текст" не будет содержать "-", то другие ответы здесь хорошие, простые и читаемые. В противном случае нам нужно полагаться на то, что, как мы знаем, является постоянным в строке. Мне кажется, что постоянная - это последние три дефиса. Поэтому я бы попытался разделить на "-" и поместить последнюю пару назад, как
string input = "Some text - 04.09.1996 - 40-18";
string[] foo = input.Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries);
int length = foo.Length;
string[] bar = new string[3];
//put "some text" back together
for(int i=0; i< length - 3;i++)
{
bar[0] += foo[i];
}
bar[1] = foo[length - 3];
bar[2] = foo[length - 2] + "-" + foo[length - 1];
Ответ 4
В текущем случае вы можете использовать Split с дополнительным пространством, например
string.Split(" - ")
В терминах "хорошей практики" не может рекомендовать это решение.
Ответ 5
Я заменяю последовательность символов "--------------------" в вашей строке специальным символом "&" как показано ниже. а затем разделить с помощью специального символа "&"
string str = "Hello, my- name -------------------- is Philip J. Fry -------------------- and i like cartoons".Replace("--------------------","&");
string[] ss=str.Split('&');
string result=ss[0] + "," + ss[1]+ "," +ss[2];
тогда строка вывода выглядит так: "Привет, мое имя, это Филипп Фрай, и мне нравятся мультфильмы"