StringReader查找我搜索的所有实例

时间:2016-12-15 19:19:02

标签: c#

我的表中有一个包含javascript代码的列(nvarchar(max))。正如您在我的示例中所看到的,每行有2个单独的javascript调用。

第1行:

(<a href="Javascript:TermDef(1000,'','451')">aaa</a>)<LI>  <a href="Javascript:TermDef(1100,'','26')">bbb</a> 

第2行:

(<a href="Javascript:TermDef(1200,'','551')">ccc</a>)<LI>  <a href="Javascript:TermDef(1300,'','270')">ddd</a>

我有以下循环遍历字符串的StringReader代码,但它只找到第一个实例。如果我每行搜索的内容只有一个实例,那么此代码非常有效。

using (StringReader rowData = new StringReader(reader[0].ToString()))
{
    string line;
    while ((line = rowData.ReadLine()) != null)
    {
        startVal = 0;
        if (line.IndexOf("Javascript:TermDef", startVal) > -1)
        {
            startVal = line.IndexOf("Javascript:TermDef", startVal);
            endVal = line.IndexOf(">", startVal);
            value = line.Substring(startVal, endVal - startVal - 1);
            Console.WriteLine(value);
        }
    }
}

如何才能找到&#34; JavaScript的所有实例:TermDef&#34;在我的行?

1 个答案:

答案 0 :(得分:1)

查找多个实例是start参数存在的原因。如果您更新起始值并循环直到找不到更多实例,则可以找到所有实例。

using (StringReader rowData = new StringReader(reader[0].ToString()))
{
    string line;
    while ((line = rowData.ReadLine()) != null)
    {
        startVal = 0;
        while (line.IndexOf("Javascript:TermDef", startVal) > -1)
        {
            startVal = line.IndexOf("Javascript:TermDef", startVal);
            endVal = line.IndexOf(">", startVal);
            value = line.Substring(startVal, endVal - startVal - 1);
            Console.WriteLine(value);
            startVal = endVal;
        }
    }
}