我对c#有点新鲜,我正在寻找字符串匹配模式来执行以下操作,
我有一个像这样的字符串
这本书将在一本书上展出 唐宁街11号的接待处 并将由关键医疗保健人员参加
我需要使用startIndex和length,
创建一个span标签来突出显示一些文本片段例如,
- startIndex = 3,长度= 10
- startIndex = 8,长度= 8
醇>
我需要动态创建span标记,并为交叉点创建单独的span标记
在这种情况下,
The < span id= 'span1' color='blue'> book < /span> < span id='intersectionSpan' color= pink > will </ span> < span id '= span2' color = 'yellow' > be showcased </ span>
任何人都遇到过任何设计模式或微笑问题
请咨询
答案 0 :(得分:1)
我不认为这与desing模式有关,但我会查看你所谓的自定义控件
如你所知,标签控件将呈现为一个跨度,所以开始制作新的控件customlabel,例如从标签控件和creta函数继承它,以接受位置(startindex和length)和颜色(红色,黄色) )
假设我们在控件
中有这个功能 private string AddSpan(string originalString, int[] location, string color)
{
string old = originalString.Substring(location[0], location[1]);
string newStr = string.Format("<span id= '{0}' color='{1}'>", "idUWant", color);
originalString = originalString.Replace(old, newStr);
return originalString ;
}
原文是这本书将在唐宁街11号的一个招待会上展出 并将由关键医疗保健人员参加
位置很简单2维数组的整数,第一个是起始索引,第二个是长度,颜色参数是颜色字符串
我认为最好为参数创建数据容器,就像只支持一些属性(如startindex,长度和颜色)以便于阅读和维护
一样。答案 1 :(得分:0)
好吧,我会从一系列“标签”开始。这些将具有要标记的文本的开头和长度。标签还应该能够判断标签中是否有某个位置。
bool IsInTag(int position)
从那里只是循环通过字符串。在每个位置加上该位置的标签数量。如果它超过最后一个位置,则启动一个新标记,因为新标记与其相交。如果它更小,则从交叉点刚刚结束时结束跨度。保存下一个循环的数字并重复。
应该这样做。你可能想玩它,因为这只是我的头脑。
答案 2 :(得分:0)
您可以使用 IndexOf
此链接可以帮助您: http://msdn.microsoft.com/en-us/library/ms228630%28VS.80%29.aspx
如果你有startIndex和length;您可以简单地使用子字符串来获取要在span标记中注入的字符串。