Разбить строку на несколько разделителей, указанных пользователем.

Обновлено: Спасибо за ответ, но я не согласен с тем, что на мой вопрос отвечает другой поток. "Несколько разделителей" и "Многосимвольные разделители" - это два разных вопроса.

Это мой код:

List<string> delimiters = new List<string>();

 List<string> data = new List<string> 
 {
 "Car|cBlue,Mazda~Model|m3",
 //More data
 };

 string userInput = "";
 int i = 1;

 //The user can enter a maximum of 5 delimiters
 while (userInput != "go" && i <= 5)
 {
 userInput = Console.ReadLine();
 delimiters.Add(userInput);
 i++;
 }

 foreach (string delimiter in delimiters)
 {
 foreach (string s in data)
 {
 //This split is not working
 //string output[] = s.Split(delimiter);
 }
 }
</string></string></string></string>

Итак, если пользователь вводит "| c" и "~", ожидаемый результат: "Автомобиль", "Синий, Мазда", "Модель | m3",

Если пользователь вводит "| c", "| m" и ",", то ожидаемым выходом будут: "Автомобиль", "Синий", "Мазда-модель", "3",

3 ответа

Добавьте пользовательский ввод в разделители списка.

string data = "Car|cBlue,Mazda~Model|m3";
 List<string> delimiters = new List<string>();
 delimiters.Add("|c");//Change this to user input
 delimiters.Add("|m");//change this to user input

 string[] parts = data.Split(delimiters.ToArray(), StringSplitOptions.******************);
 foreach (string item in parts)
 {
 Console.WriteLine(item); 
 }
</string></string>


String.Split имеет перегрузку, которая делает именно это - вам просто нужно преобразовать свой List в string[]:

string input = "Car|cBlue,Mazda~Model|m3";
List<string> delims = new List<string> {"|c", "~"};

string[] out1 = input.Split(delims.ToArray(),StringSplitOptions.None);

//output: 
// Car 
// Blue,Mazda 
// Model|m3 

delims = new List<string> {"|c", "|m", ","};

string[] out2 = input.Split(delims.ToArray(),StringSplitOptions.None).Dump();

//output:
// Car 
// Blue 
// Mazda~Model 
// 3 
</string></string></string>


Вы можете использовать SelectMany для получения результата из всех строк data и ToArray() для создания массива из delimiters

var result = data.SelectMany(s => s.Split(delimiters.ToArray(), StringSplitOptions.None));

licensed under cc by-sa 3.0 with attribution.