C # расщепление строк - PullRequest
       0

C # расщепление строк

4 голосов
/ 16 сентября 2010

Если у меня есть строка: str1|str2|str3|srt4 и анализировать ее с | в качестве разделителя. Мой вывод будет str1 str2 str3 str4.

Но если у меня есть строка: str1||str3|str4, результат будет str1 str3 str4. То, что я ищу, чтобы мой вывод был похож на str1 null/blank str3 str4.

Надеюсь, это имеет смысл.

string createText = "srt1||str3|str4";
string[] txt = createText.Split(new[] { '|', ',' },
                   StringSplitOptions.RemoveEmptyEntries);
if (File.Exists(path))
{
    //Console.WriteLine("{0} already exists.", path);
    File.Delete(path);
    // write to file.

    using (StreamWriter sw = new StreamWriter(path, true, Encoding.Unicode))
    {
        sw.WriteLine("str1:{0}",txt[0]);
        sw.WriteLine("str2:{0}",txt[1]);
        sw.WriteLine("str3:{0}",txt[2]);
        sw.WriteLine("str4:{0}",txt[3]);
    }
}

выход

str1:str1
str2:str3
str3:str4
str4:"blank"

Это не то, что я ищу. Это то, что я хотел бы закодировать:

str1:str1
str2:"blank"
str3:str3
str4:str4

Ответы [ 4 ]

9 голосов
/ 16 сентября 2010

Попробуйте это:

str.Split('|')

Если StringSplitOptions.RemoveEmptyEntries не пройдено, все будет работать как вы хотите.

8 голосов
/ 16 сентября 2010

это должно сработать ...

string s = "str1||str3|str4";
string[] parts = s.Split('|');
4 голосов
/ 16 сентября 2010

Самый простой способ - использовать Количественное определение :

using System.Text.RegularExpressions;
...
String [] parts = new Regex("[|]+").split("str1|str2|str3|srt4");

"+" избавляется от него.

Из Википедия :«+» Знак «плюс» указывает на наличие одного или нескольких предшествующих элементов.Например, ab + c соответствует «abc», «abbc», «abbbc» и т. Д., Но не «ac».

Форма msdn: Методы Regex.Split аналогично методу String.Split, за исключением того, что Split разбивает строку по разделителю, определяемому регулярным выражением вместо набора символов.Входная строка разбивается столько раз, сколько возможно.Если шаблон не найден во входной строке, возвращаемое значение содержит один элемент, значением которого является исходная входная строка.

Дополнительное желание можно выполнить с помощью:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1 {
    class Program{
        static void Main(string[] args){
            String[] parts = "str1||str2|str3".Replace(@"||", "|\"blank\"|").Split(@"|");

            foreach (string s in parts)
                Console.WriteLine(s);
        }
    }
}
1 голос
/ 16 сентября 2010

Попробуйте что-то вроде этого:

string result = "str1||str3|srt4";
List<string> parsedResult = result.Split('|').Select(x => string.IsNullOrEmpty(x) ? "null" : x).ToList();

при использовании Split() результирующая строка в массиве будет пустой (не нулевой).В этом примере я проверил его и заменил его фактическим словом null, чтобы вы могли увидеть, как подставить другое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...