在方法中提取循环外的变量

时间:2014-01-07 03:07:48

标签: java html loops

这是一种基本上摆脱某些文本中的html标签的方法。删除方法由以下给出,我测试了它,它的工作原理。

    public static String remove(String text, String str) {

    int firstIndex = text.indexOf(str);
    int beginofNewIndex = (firstIndex + 1) + str.length();

    if (firstIndex > 0) {
        return text.substring(0, firstIndex) + text.substring(beginofNewIndex);
    } else {
        return text;
    }
} 

然而,当我返回下面给出的“text”时,它给出了与输入时相同的值。因此,假设方法removeAllTags的参数是String文本。我输入“< b>男孩走了< / b>”但它返回相同的东西。有人看错了什么吗?

    public static String removeAllTags(String text) {

    int textLength = text.length();

    while (textLength > 2) {
        int firstIndex = text.indexOf("<");
        int secondIndex = text.indexOf(">");
        int thirdIndex = text.indexOf("</", secondIndex);
        int fourthIndex = text.indexOf(">", secondIndex);

        if (firstIndex >= 0 && secondIndex >= 0 && thirdIndex >= 0 && fourthIndex >= 0F) {


            remove(text, text.substring(firstIndex, (secondIndex + 1)));
            // remove(text, text.substring(thirdIndex, (fourthIndex + 1))); I will implement this into the code but I am testing with the first remove method first.



        }
        textLength = textLength - 1;
    }
    return text;

}

3 个答案:

答案 0 :(得分:2)

关键问题是这一行:

remove(text, text.substring(firstIndex, (secondIndex + 1)));

这没有任何作用。

Java不像C一样通过引用传递,并且字符串是不可变的,因此对传入的字符串所做的任何更改都不会反映在方法之外。

相反,您必须将结果分配回变量:

text = remove(text, text.substring(firstIndex, (secondIndex + 1)));

无论您的代码有什么其他问题,这个问题都是最大的。

答案 1 :(得分:1)

问题是你的字符串和条件

"< b> The boy walked < /b >" 

你的这个字符串在&lt; space / b&gt;之间有空格,这会给出错误的结果

int thirdIndex = text.indexOf("</", secondIndex);

这就是为什么它不进入循环而你需要使用返回的文本分配文本

text = remove(text, text.substring(firstIndex, (secondIndex + 1)));

您还可以使用正则表达式删除所有html标记

str.replaceAll("\\<.*?>","")

答案 2 :(得分:1)

try this give your comment
change these lines
int beginofNewIndex = (firstIndex) + str.length();
this will point new char after >
and
if (firstIndex >= 0) 
this will accept when < is in first index like <br>hai.