C.J.
C.J.

Reputation: 3527

Split a string base on multiple delimiters specified by user

Updated: Thank you for the answer, but I disagree that my question is answered by another thread. "Multiple delimiters" and "Multi-Character delimiters" are 2 different questions.

This is my code so far:

        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);
            }
        }

So, if the user enters "|c" and "~", the expected output is: "Car", "Blue,Mazda", "Model|m3"

If the user enters "|c", "|m", and ",", then the expected output will be: "Car", "Blue", "Mazda~Model", "3"

Upvotes: 0

Views: 150

Answers (3)

Unnie
Unnie

Reputation: 947

Add the user input into the List delimiters.

 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.RemoveEmptyEntries);
            foreach (string item in parts)
            {
                Console.WriteLine(item);   
            }

Upvotes: 3

D Stanley
D Stanley

Reputation: 152634

String.Split has an overload that does exactly that - you just need to convert your List<string> to a 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 

Upvotes: 3

Dmitrii Dovgopolyi
Dmitrii Dovgopolyi

Reputation: 6299

You can use SelectMany to get the result from all the data strings and ToArray() method to create an array from delimiters

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

Upvotes: 2

Related Questions