gpt4 book ai didi

c# - 如何在 C# 中拆分文本并保持每个部分的位置

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:49 25 4
gpt4 key购买 nike

我想根据分隔符拆分大文本。

我用过:

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;

关于c# - 如何在 C# 中拆分文本并保持每个部分的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com