在拆分字符串中查找所有组

时间:2015-11-13 09:35:54

标签: c# string linq

注意标题并不能完全反映出我需要做的事情,但由于我的英语不够完美,我无法找到正确的字词。如果有人想要纠正它,请随意。

给定一个包含组的字符串(由n个点分隔)我想得到所有值:group [0];组[0]。集团[1];组[0]。集团[1] ..组[N]。

示例:输入:string input = "Tr.WH.Eu6.ISC"; string[] splitStrings = input.Split('.'); List<string> subs = new List<string> { "" }; for (int i = 0; i < splitStrings.Count(); i++) { subs.Add(subs.Last() + "." + splitStrings[i]); } subs.Remove(""); 会给出:

  • Tr的
  • Tr.WH
  • Tr.WH.Eu6
  • Tr.WH.Eu6.ISC

现在我有了这段代码:

gson.fromJson

我发现它很难看,并且在输出时没有完全发挥作用:

  • .Tr
  • .Tr.WH
  • .Tr.WH.Eu6
  • .Tr.WH.Eu6.ISC

如何使其有效(最好使用Linq)?

4 个答案:

答案 0 :(得分:6)

使用LINQ:

string input = "Tr.WH.Eu6.ISC";
string[] groups = input.Split('.');
string[] output = groups.Select((x, idx) => string.Join(".", groups.Take(idx + 1)))
                        .ToArray();

对于每个组,其中idx是组的索引,从组集合中获取(idx + 1)条目,并将它们与&#34;连接起来。&#34;分隔符。

答案 1 :(得分:3)

我不知道在Linq中完全执行此操作的方法,但您可以使用String.Join.Take(来自Linq)清理代码。

string input = "Tr.WH.Eu6.ISC";
string[] splitStrings = input.Split('.');
List<string> subs = new List<string>();
for (int i = 1; i <= splitStrings.Count(); i++)
{
    subs.Add(String.Join(".", splitStrings.Take(i).ToArray()));
}

答案 2 :(得分:1)

试试这个:

var v = str.Split('.');
            for(int i=0;i<v.Count();i++)
        {
            Console.WriteLine(string.Join(".", v.Take(i+1)));
        }

我们仍采用Split方法,然后在循环中使用JoinTake,以便每次都显示越来越多的细分。

Demo

另一种方式:

var v = str.Split('.');
Enumerable.Range(1,v.Count()).ToList().ForEach(x => Console.WriteLine(string.Join(".", v.Take(x))));

Demo

答案 3 :(得分:0)

没有LINQ。将字符串拆分成数组然后加入 - 它不是内存有效的代码。

static IEnumerable<string> SplitIntoGroups(string s, char delimiter)
{
    for (int findPos = 0, delimPos = 0; 
            (delimPos = s.IndexOf(delimiter, findPos)) != -1; 
            findPos = delimPos + 1)
    {
        yield return s.Substring(0, delimPos);
    }

    yield return s;
}