C#删除html标签内的内容(无正则表达式)

时间:2012-12-19 05:48:33

标签: c#

我想删除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 )
            {


            }

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