在拆分字符串中查找所有组
本文关键字:查找 拆分 字符串 | 更新日期: 2023-09-27 18:21:50
注意标题并不能准确反映我需要做什么,但我找不到正确的单词,因为我的英语并不完美。如果有人想纠正,请放心。
给定一个包含组(由n个点分隔)的字符串,我想获得所有值:group[0];group[0]。group[1];组[0]。组[1]..组[n].
示例:输入:Tr.WH.Eu6.ISC
将给出:
- Tr
- Tr.WH
- Tr.WH.Eu6
- Tr.WH.Eu6.ISC
现在我有这个代码:
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.W.H.Eu6
- .Tr.W.H.Eu6.ISC
我如何使它工作(最好是与Linq一起)?
使用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是组的索引,从groups集合中获取(idx+1)个条目,并使用"."分隔符将它们连接起来。
我不知道如何在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()));
}
试试这个:
var v = str.Split('.');
for(int i=0;i<v.Count();i++)
{
Console.WriteLine(string.Join(".", v.Take(i+1)));
}
我们仍然使用Split
方法,然后在循环中使用Join
和Take
来显示每次增加的分段数量。
演示
另一种方式:
var v = str.Split('.');
Enumerable.Range(1,v.Count()).ToList().ForEach(x => Console.WriteLine(string.Join(".", v.Take(x))));
演示
没有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;
}