C# 根据用户指定的多个分隔符拆分字符串

C# 根据用户指定的多个分隔符拆分字符串,c#,string,split,C#,String,Split,更新:谢谢你的回答,但我不同意我的问题是由另一个线程回答。多分隔符和多字符分隔符是两个不同的问题 这是我目前的代码: List<string> delimiters = new List<string>(); List<string> data = new List<string> { "Car|cBlue,Mazda~Model|m3", //More data

更新:谢谢你的回答,但我不同意我的问题是由另一个线程回答。多分隔符和多字符分隔符是两个不同的问题

这是我目前的代码:

        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);
            }
        }
因此,如果用户输入| c和~,则预期输出为:Car、Blue、Mazda、Model | m3

如果用户输入| c、| m和,,则预期输出将是:Car、Blue、Mazda~Model,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.RemoveEmptyEntries);
            foreach (string item in parts)
            {
                Console.WriteLine(item);   
            }
您可以使用SelectMany从所有数据字符串中获取结果,使用ToArray方法从分隔符创建数组


可能重复的我不明白为什么您不能使用拆分已采用的数组。@sab669多个分隔符和多个字符分隔符是两个完全不同的问题。问题是,我无法硬编码分隔符,因为它们是由用户指定的。编辑了您的要求的答案。只需添加逻辑,即可将所有用户输入获取到列表对象中。它不起作用。。。我想我的问题更多的是关于如何分配动态分隔符,因为我不能硬编码分隔符。用户必须指定them@C.J.查看我的编辑-只需将列表转换为字符串数组即可。
 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);   
            }
var result = data.SelectMany(s => s.Split(delimiters.ToArray(), StringSplitOptions.None));