Java 使用StringTokenizer删除html标记

Java 使用StringTokenizer删除html标记,java,html,tags,Java,Html,Tags,这是我的字符串: String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font> <font size="4"><strong>"; 我想使用StringTokenizer删除字符串中的所有html标记。但我不明白在这种情况下如何使用StringTokeniz

这是我的字符串:

String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font>        
<font
size="4"><strong>";

我想使用StringTokenizer删除字符串中的所有html标记。但我不明白在这种情况下如何使用StringTokenizer。因为当我使用str.replaceAll\\、时,删除所有标记是无效的,因为一些标记将位于字符串的下一行,如上面的字符串所示。但我想在这两种情况下都这么做。我怎么做?我想使用StringTokenizer实现它。谢谢..

尝试单独使用正则表达式或StringTokenizer处理HTML是。。。痛苦

在你继续之前,这是必读的

如果您的HTML文件很简单,您可以删除换行符,然后应用正则表达式,然后重新格式化HTML,或者尝试使用多行正则表达式


但是您应该真正考虑使用一个合适的HTML解析器。请参阅,可能还有其他许多…

一般来说,除了HTML解析库之外,您不应该使用任何东西解析HTML。编写您自己的解析器会带来安全风险,并使您的应用程序暴露于可能的攻击向量,如跨站点脚本和各种其他错误。再次强调:不要用正则表达式或简单的标记器解析HTML。此规则的一个例外可能是,如果您有一小组已知的HTML数据输入,并且您将仅在该数据上使用代码。在这个场景中,您可以并且应该验证您的代码是否为每个输入执行了正确的操作

也就是说,你原来的正则表达式非常接近。点通配符匹配除换行符以外的所有内容,因此,如果我们在正则表达式中添加除点通配符之外的换行符的可能性,我们将在测试字符串中得到肯定的结果

public static String removeAllHtml(String htmlContent) {
    return Jsoup.parse(htmlContent).text();
}

public static void main(String[] args) {
    String htmlContent = "<pre><font size=\"5\"><strong><u>LVI . The Day of Battle</u></strong></font><fontsize=\"4\"><strong>";
    System.out.println(removeAllHtml(htmlContent));
}

请勿在未知输入上使用此代码!不要在生产中使用它!解析HTML不是一种安全或正确的方法。

最好使用HTML解析器库而不是StringTokenizer。请看下面的演示:

从下载jsoup-1.6.1.jar核心库。 将此库添加到类路径。 随意使用HTML。下面的示例是将HTML内容转换为文本格式的代码:

导入org.jsoup.jsoup

公共类HTMLPasser{

}


A您不应该使用StringTokenizer。正如文档所述,它是一个遗留类。B试图用正则表达式解析HTML是徒劳的。@BrianRoach有另一个用于删除HTML标记JSon的库,但我不能使用其他库,似乎没有其他方法来实现它。为什么你不能使用其他库?@DNA,因为这实际上是我的实验室作业,我不能使用其他东西…助理说你必须使用StringTokenizer,或者仅仅是因为您不能使用外部库?+1来正确警告使用正则表达式解析HTML,我需要包括?。然而,跨站点脚本是一类特定的bug,攻击者可以在其中诱使用户的浏览器执行恶意代码(通常是JavaScript)。简单地解析HTML不会打开XSS,因为您没有执行任何操作。
public static String removeAllHtml(String htmlContent) {
    return Jsoup.parse(htmlContent).text();
}

public static void main(String[] args) {
    String htmlContent = "<pre><font size=\"5\"><strong><u>LVI . The Day of Battle</u></strong></font><fontsize=\"4\"><strong>";
    System.out.println(removeAllHtml(htmlContent));
}