从现在开始,如果您看到下面的代码,我需要如何更动态地处理此问题的建议,我正在硬编码findText [0]和findText [1],但是后来findText的值会增长,我不知道它将有多少个值,那么我将不知道有多少索引。
我知道使用foreach循环可以解决这种情况,但是问题是假设我有两个值“ abc,xyz” abc是第一个值,因此假设如果未在行中找到abc,它将转到其他部分,并且它将将行追加到stringbuilder,现在,当下一个值到达“ xyz”并且在行中找到它时,它将再次被追加。那么如何处理呢?为了处理此问题,我使用了findtext [0]和findtext [1]方法,但这在所有情况下均不起作用。
foreach (string fText in findText.Split(','))
{
if (line.IndexOf(fText , StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
{
Regex regexText = new Regex(findText[0], RegexOptions.IgnoreCase);
line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[0] + " </span>");
builder.Append(line);
}
else
{
builder.Append(line);
builder.Append("<br/>");
}
}
到目前为止使用的方法-
string[] findText = ("suspicious,suspcious").Split(',') ;
while ((line = sr.ReadLine()) != null)
{
if (line.IndexOf(findText[0], StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
{
Regex regexText = new Regex(findText[0], RegexOptions.IgnoreCase);
line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[0] + " </span>");
builder.Append(line);
}
if (line.IndexOf(findText[1], StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
{
Regex regexText = new Regex(findText[1], RegexOptions.IgnoreCase);
line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[1] + " </span>");
builder.Append(line);
}
else
{
builder.Append(line);
builder.Append("<br/>");
}
}
答案 0 :(得分:0)
由于条件块的内容似乎相同,因此可以使用LINQ查找第一个匹配项,如下所示:
<Camera ref={ref => { this.camera = ref }} style={{ height:'75%',width:'90%',borderRadius:10,borderColor:'black',borderWidth:2 }} type={this.state.type}/>
var find = findText.FirstOrDefault(t => line.IndexOf(t, StringComparison.OrdinalIgnoreCase) >= 0);
if (find != null) {
Regex regexText = new Regex(find, RegexOptions.IgnoreCase);
line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + find + " </span>");
builder.Append(line);
} else {
builder.Append(line);
builder.Append("<br/>");
}
将产生初始匹配项或FirstOrDefault
,让您选择要附加的行。
答案 1 :(得分:0)
while ((line = sr.ReadLine()) != null)
{
string[] finds = findText.Split(',');
bool found = false;
foreach (string find in finds)
{
if (Regex.IsMatch(line, find, RegexOptions.IgnoreCase))
{
found = true;
Regex regexText = new Regex(find, RegexOptions.IgnoreCase);
line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + find + " </span>");
builder.Append(line);
break;
}
}
if (!found)
{
builder.Append(line);
builder.Append("<br/>");
}
}