разбиение строки на основе нескольких разделителей символов - PullRequest
57 голосов
/ 30 сентября 2011

У меня есть строка "4,6,8 \ n9,4"

Я хочу разделить это на основе, и \ n

Выходной массив должен быть

4
6
8
9
4

Редактировать:

Теперь я читаю строку из консоли, когда я ввожу строку, как указано выше в консоли, в коде позади я получаю как "4,6,8\\n9,4". Теперь, когда я хочу разделить, используя "," and "\\n". Как я могу изменить выражение?

Ответы [ 5 ]

107 голосов
/ 30 сентября 2011

Используйте string.Split (char [])

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

EDIT

Попробуйте выполнить следующие действия, если получите ненужные пустые элементы. Метод String.Split (String [], StringSplitOptions)

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

EDIT2

Это работает для вашего обновленного вопроса.Добавьте все необходимые символы разделения на char [].

string [] split = strings.Split(new Char[] { ',', '\\', '\n' },
                                 StringSplitOptions.RemoveEmptyEntries);
8 голосов
/ 30 сентября 2011

Другой вариант - использовать Regex.Split .Это полезно, когда расщепленные последовательности являются более сложными.Например, если пробелы также могут быть частью разделителей, таких как:

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

Тогда:

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" }

Обратите внимание, что используемое регулярное выражение является «более приемлемым» - оно игнорируетпустое «пробел» между \ n и он будет принимать «4 6 8 9 4» точно так же - так что выше, чтобы показать точку: существует более одного способа снять кожу с кошки.

Happyкодирование.

6 голосов
/ 30 сентября 2011
var s = "4,6,8\n9,4";
var split = s.Split(new char[]{',', '\n'});

Но это должно быть обманом ...

РЕДАКТИРОВАТЬ : адресация комментария.

Этот код:

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

Выводит это:

4
6
8
9
4

РЕДАКТИРОВАТЬ : чтение ввода с консоли отличается.\n отличается при вводе вручную.

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);
}
4 голосов
/ 30 сентября 2011
string tosplit = "4,6,8\n9,4";
var split = tosplit.Split(new Char [] {',', '\n' });

На случай, если вы не печатаете / не видите его правильно:

split.ToList().ForEach(Console.WriteLine);
2 голосов
/ 30 сентября 2011

Можете ли вы сделать string.Replace ('\ n', ','), за которым следует string.split (',')?

...