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

Ручная строка, разделенная на С#

В моем коде я пытаюсь манипулировать строкой:

Some text - 04.09.1996 - 40-18

Я хотел бы разбить это на три подстроки: Some text, 04.09.1996 и 40-18.

Когда я использую метод Split с дефисом в качестве разделителя, возвращаемое значение представляет собой массив из четырех строк: Some text, 04.09.1996, 40 и 18. Как я могу заставить этот код работать, как описано выше?

Спасибо.

4b9b3361

Ответ 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];

тогда строка вывода выглядит так: "Привет, мое имя, это Филипп Фрай, и мне нравятся мультфильмы"