我有一组标签可能会在控制台中显示为颜色标签。其中有37个。
所以,我做了这段代码:
tagsCT是一个字符串[]
foreach (string tag in tagsCT)
{
if (text.Contains(tag))
{
ArrayList x = new ArrayList();
x.Add(tag);
x.Add(tagsColorValues[k]);
tagss.Add(text.IndexOf(tag));
tags.Add(text.IndexOf(tag) - 1, x);
}
k++;
}
我有什么: text =“2013-11-11 17:56:14 [INFO] $ 4 / time:$ 5改变每个世界的时间” 我需要做的是找到字符串中的所有颜色标签。所有可能的都是 在数组字符串[]
中tagsCT = { "$1","$2","$3","$4" }
我将其作为示例展示,但标签的长度并不总是相同。 但问题出现在这些情况下:
text = "2013-11-11 17:56:14 [INFO] $4/time: $5Changes the time on each $4world"
将无法检测到最后一个标记。问题是如何防止它。
答案 0 :(得分:2)
您可以改为使用Dictionary<string, IList<int>>
:
var tagIndices = new Dictionary<string, IList<int>>();
foreach (string tag in tagsCT)
{
IList<int> indices;
if (tagIndices.TryGetValue(tag, out indices))
continue; // to prevent the same indices on duplicate tags, you could also use a HashSet<string> instead of the array
else
{
indices = new List<int>();
tagIndices.Add(tag, indices);
}
int index = text.IndexOf(tag);
while (index >= 0)
{
indices.Add(index);
index = text.IndexOf(tag, index + 1);
}
}
每个标记都存储为键,值为索引列表(可以为空)。
答案 1 :(得分:1)
在处理完标签后,将其从“文本”字符串中删除后怎么样?
您还可以使用IndexOf值使用for(int i;;i)
结构。
(对不起,他到底在哪里发表评论按钮呢?)