我想基于定界符拆分大文本。
我用了:
string[] parts = text
.Split(new string[] { Environment.NewLine + "##" }, StringSplitOptions.None);
我想知道开始位置(每个部分的字符索引)。我可以搜索循环中的每个部分:
int[] pos = new int[slides.Length];
for (int i = 0; i < slides.Length; i++)
{
pos[i] = i == 0 ? text.IndexOf(slides[i]) : text.IndexOf(slides[i], pos[i-1] + 1);
}
或者,我可以搜索分隔符。我想知道是否有更快更好的解决方案。
最佳答案
您只有一个定界符,并且不会删除空项目。为什么不总结长度?
abc\r\n##defhhdsncdslcnslsc\r\n##pqr....
^ ^ ^
0 abc.Length + abc.Length +
delimiter.Length delimiter.Length +
defhhdsncdslcnslsc.Length +
delimiter.Length
代码(
item
及其index
):string delimiter = Environment.NewLine + "##";
int sum = 0;
var parts = text
.Split(new string[] {delimiter}, StringSplitOptions.None)
.Select(item => {
int index = sum;
sum = delimiter.Length + item.Length;
return new {
item, // item
index // its index
};
});
或(
2
分隔的数组):string[] parts = text.Split(new string[] {delimiter}, StringSplitOptions.None);
int[] pos = new pos[parts.Length];
for (int sum = 0, i = 0; i < parts.Length; sum += delimiter.Length + parts[i].Length, ++i)
pos[i] = sum;