Разбить строку на "\\" и / или "/" с помощью LINQ? - PullRequest
0 голосов
/ 16 марта 2012

Как я могу разбить следующую строку на "\" и / или "/", используя LINQ

Я говорю и / или для "\" и "/", потому что в моих путях к файлам я могу получить только косые черты, только косые черты или сочетание обоих.

 "temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"

 "temp\\SimpleRec\\bin\\Debug\\Geming.SimpleRec.vshost.exe"

 "temp/SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"

Спасибо

Ответы [ 6 ]

1 голос
/ 16 марта 2012

Вы можете разделить с помощью LINQ следующим образом:

var list=from item in str.Split(new string[] { "\\","/" }, StringSplitOptions.None)
         select item;
1 голос
/ 16 марта 2012

String.Split(), кажется, лучший вариант здесь, но просто для удовольствия, это также можно сделать с LINQ.

Одна из моих реализаций из String Calculator Kata использует этот подход (вообще не Split).См. InternalAdd() метод.Я принял функциональный подход с головой и хвостом.Вы делите строку на head и tail с помощью .Take() и возвращаете head + рекурсивный результат вызова той же функции для tail.

Пример кода для одного разделителя символов приведен ниже (все усложняется, когда разделители становятся длиннее):

    private IEnumerable<string> BreakString(string source)
    {
        var delimiter = '/';
        var head = source.TakeWhile(c => c != delimiter);
        if (!head.Any())
        {
            yield break;
        }
        var tail = source.SkipWhile(c => c != delimiter)
            .Skip(1);
        yield return String.Join("", head);
        foreach (var t in BreakString(String.Join("", tail)))
        {
            yield return t;
        }

    }


// usage
from s in BreakString(source)

Вы также можете пойти дальше и избавиться от String.Join() с помощью tail.Aggregate(new StringBuilder(), (sb, c) => sb.Append(c)).ToString();

1 голос
/ 16 марта 2012

Здесь нет необходимости использовать LinQ, метод Split () по умолчанию будет работать:

var path = "temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"
var parts = path.Split(new[] { '/', '\\' });

Надеюсь, это поможет!

1 голос
/ 16 марта 2012

Иногда я думаю, что LINQ пытаются использовать для всего, когда это не так.

string[] data = myString.Split(new Char[]{'\\', '/'});
1 голос
/ 16 марта 2012

Вам не нужно LINQ для этого:

string[] values = myString.Split(new []{'\\', '/'});

Введение LINQ для такой задачи только добавляет сложности и снижает удобочитаемость.

0 голосов
/ 16 марта 2012

LINQ не требуется, просто сделайте это:

var path = @"temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe";
var split = path.Split(new [] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...