处理字符串中的子字符串的有效方法

时间:2019-04-09 07:46:50

标签: c# string

我有以下字符串(实际上包含更多元素)

string content= "  {
                  element1: one
                  element2: two
                  element3:three
                   }
                   {
                   element1: uno
                   element2: dos
                   element3:tres
                   }"; 

,我需要逐个处理此字符串 (元素是{}内部的元素,在上面的例子中是两个元素,但是可以包含更多元素)

现在,我正在考虑执行常规的IndexOf来找到{},然后一个个地提取子字符串。

我的问题是:有没有更有效的方法?

1 个答案:

答案 0 :(得分:1)

假设您的格式不再有古怪之处(例如,定界符或转义序列),则可以使用LINQ解析该字符串。

    var data = content.Replace("}","").Replace("\r\n","\n").Split('{')
        .Select
        ( 
            block => block.Split('\n')
            .Where
            ( 
                line => !string.IsNullOrWhiteSpace(line)
            )
            .Select
            ( 
                line => line.Split(new char[] {':'}, 2)
            )
            .ToDictionary
            ( 
                fields => fields[0].Trim(), 
                fields => fields[1].Trim()
            )
        )
        .ToList();

    foreach (var list in data)
    {
        foreach (var entry in list)
        {
            Console.WriteLine("{0}={1}", entry.Key, entry.Value);
        }
    }

输出:

element1=one
element2=two
element3=three
element1=uno
element2=dos
element3=tre

DotNetFiddle