我想删除html标记之间的文本,然后在textBox2中显示它。 我需要获得“<”的开始位置和“>”然后删除标签及其间的所有内容。 我不想使用正则表达式。
这是我到目前为止所得到的
string input = textBox1.Text;
string output = textBox2.Text;
string results;
for (int i = 0; i < input.Length; i++)
{
if(input.IndexOf('<',i) !=-1 )
{
}
答案 0 :(得分:2)
这应该做你想要的。但是,它不会处理格式错误的情况。例如,如果您输入输入字符串Hello < world
,则输出将为Hello
。
string input = textBox1.Text;
StringBuilder output = new StringBuilder(input.Length);
bool inATag = false;
for (var i = 0; i < input.Length; i++) {
if (!inATag && input[i] != '>' && input[i] != '<') {
output.Append(input[i]);
} else if (input[i] == '<') {
inATag = true;
} else if (input[i] == '>') {
inATag = false;
}
}
textBox2.Text = output.ToString();
为了解释发生了什么,我一次在输入字符串中迭代一个字符。如果我找到一个开头<
,我进入一个状态,在找到结束>
之前,我不会将任何输入添加到输出中。
我生成输出字符串的方法是使用StringBuilder
进行字符串连接,与仅使用string output += input[i]
相比,可以提高性能。建议不要简单地使用string
作为输出变量类型,因为每次将2个字符串连接在一起时,它会分配一个全新且不同的字符串。随着时间的推移,这将影响性能。使用StringBuilder
,将只分配一个字符串对象,并且在循环中每次迭代都不会创建新的字符串对象。
Microsoft有written a good explanation of why to use a StringBuilder
,但一般规则是,当您发现自己在循环内连接字符串时,应该使用StringBuilder。
相反,对于已知输入字符串总是较小的情况it is better to not use a StringBuilder
。如果您只连接少量字符串,则创建一个StringBuilder
对象会受到惩罚。例如,如果您希望仅执行10个字符串连接,则将其视为使用StringBuilder的反模式。但是,如果您连接数百个字符串,就像您在此示例中一样,那么 非常适合使用StringBuilder
。