这是一种基本上摆脱某些文本中的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;
}
答案 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.