基于多个字符分隔符拆分字符串

我有一个字符串“4,6,8 n9,4”

我想把这个分开

输出数组应该是

4
6
8
9
4

编辑:

现在我正在从控制台读取字符串,当我在控制台输入上面的字符串时,在后面的代码中我得到的是 "4,6,8\\n9,4"。现在我想分裂使用 "," and "\\n"。我怎样才能改变表达方式?

114516 次浏览
var s = "4,6,8\n9,4";
var split = s.Split(new char[]{',', '\n'});

But this has to be a dupe...

EDIT: Addressing the comment.

This code:

static void Main(string[] args)
{
var s = "4,6,8\n9,4";


foreach (var a in s.Split(new char[] { ',', '\n' }))
System.Diagnostics.Debug.WriteLine(a);
}

Outputs this:

4
6
8
9
4

EDIT: Reading input from the console is different. \n is different when entered manually.

static void Main(string[] args)
{
var s = "4,6,8\\n9,4";


foreach (var a in s.Split(new string[] { ",", "\\n" }, StringSplitOptions.RemoveEmptyEntries))
System.Diagnostics.Debug.WriteLine(a);
}

Use string.Split(char [])

string strings = "4,6,8\n9,4";
string [] split = strings .Split(new Char [] {',' , '\n' });

EDIT

Try following if you get any unnecessary empty items. String.Split Method (String[], StringSplitOptions)

string [] split = strings .Split(new Char [] {',' , '\n' },
StringSplitOptions.RemoveEmptyEntries);

EDIT2

This works for your updated question. Add all the necessary split characters to the char [].

string [] split = strings.Split(new Char[] { ',', '\\', '\n' },
StringSplitOptions.RemoveEmptyEntries);

Can you do a string.Replace('\n',',') followed by the string.split(',') ?

string tosplit = "4,6,8\n9,4";
var split = tosplit.Split(new Char [] {',', '\n' });

Just in case you are not printing / seeing it properly:

split.ToList().ForEach(Console.WriteLine);

Another option is to use Regex.Split. This is useful when the split sequences are more complex. For instance if spaces can also be part of the split delimiters such as:

"4,6,8 , 9\\n\\n4"

Then:

using System.Text.RegularExpressions;
var i = "4,6,8 , 9\n\n4";
var o = Regex.Split(i, @"[,\s\n]+");
// now o is:
// new string[] { "4", "6", "8", "9" }

Note that the regular expression used is "more accepting" - it ignored the empty "space" between the \n's and it would accept "4 6 8 9 4" just the same - so the above to to show a point: there is more than one way to skin a cat.

Happy coding.

// input string
string input = "email@domain.com;email2@domain.com,email3@domain.com;";


// each character in this string will split it
string splitBy = ",;";


// do the split, remove any blank results
string[] result = input.Split(splitBy.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

output is an array of strings:

email@domain.com
email2@domain.com
email3@domain.com