C# 拆分长字符串(按空格),但也存储每个单词的所有索引
我有一个字符串,我想用空格分割,以存储在单词词典中(足够简单)。不过,我还需要每个单词的索引和长度 到目前为止,我只有一本字典,里面有这些单词,以及它们被发现的顺序C# 拆分长字符串(按空格),但也存储每个单词的所有索引,c#,.net,string,split,indexing,C#,.net,String,Split,Indexing,我有一个字符串,我想用空格分割,以存储在单词词典中(足够简单)。不过,我还需要每个单词的索引和长度 到目前为止,我只有一本字典,里面有这些单词,以及它们被发现的顺序 private Dictionary<int,String> makeDictionary(String ASCII) { string[] t = ASCII.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntri
private Dictionary<int,String> makeDictionary(String ASCII)
{
string[] t = ASCII.Split(new[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);
Dictionary<int, string> aDictionary = new Dictionary<int, string>();
for (int i = 0; i < t.Length; i++)
{
t[i] = stripSymbolsFromString(t[i]);
if (!aDictionary.ContainsValue(t[i]) && t[i] != "")
{
aDictionary.Add(i, t[i]);
}
}
return aDictionary;
}
private Dictionary makeDictionary(字符串ASCII)
{
字符串[]t=ASCII.Split(新[]{''},
StringSplitOptions.RemoveEmptyEntries);
Dictionary addictionary=新字典();
对于(int i=0;i
有人知道我如何在保留索引的同时使用.Split(),还是我必须使用不同的串联技术?正如下面有人发布的,使用正则表达式将给出匹配的索引
编辑:我不需要长度。正如有人指出的,我只能从绳子上得到它。我只需要这个词的起始索引
EDIT2:我将忽略重复的单词
EDIT3:以下是我将使用的字符串示例:
Lorem Ipsum只是印刷和排版的虚拟文本
工业。Lorem Ipsum一直是业界标准的虚拟文本
从16世纪开始,当一个不知名的印刷商在一个厨房里打印
把它拼凑成一本样本书。它不仅存活了下来
五个世纪,也是电子排版的飞跃,
基本保持不变。它在20世纪60年代开始流行
发布包含Lorem Ipsum通道的Letraset表,以及
最近使用的是像Aldus PageMaker这样的桌面发布软件
包括Lorem Ipsum的版本
所以第一对元素是
[0]=>Lorum
[6] =>同侧
[12] =>是
其中数字0,6,12是字符串中单词的原始索引
Match具有索引和长度您是说在拆分字符串时保留顺序位置。。?另外,如果您可以粘贴您尝试拆分的字符串的示例。您是指索引在原始字符串中的位置吗?或在分割阵列中的位置?此外,你的字典似乎是倒退的。它应该使用字符串作为键,这避免了在每次迭代中都需要使用
.ContainsValue
。我同意Matt
字典应该是dictionary aDictionary=new dictionary()代码>您希望如何搜索或检索这些?从技术上讲,拆分将根据我阅读的内容保留信息。Length-item[i]给出了它的关系,类似于.Last()实际上是array.Lenth-1…您希望如何在列表中存储索引和长度?长度只是字符串的一个属性。索引是单词的索引还是字符位置的索引?
string s = "abc def ghijkl mno abc";
var words = Regex.Matches(s, @"[^ ]+").Cast<Match>()
.Select(m => new
{
Str = m.Value, //OR Length = m.Value.Length
Offset = m.Index
})
.ToList();
var dict = words.GroupBy(w => w.Str)
.ToDictionary(g => g.Key, g => g.Select(x => x.Offset).ToList());