删除HTML标签使用的StringTokenizer
这里是我的字符串:删除HTML标签使用的StringTokenizer
String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font>
<font
size="4"><strong>";
我想删除所有的HTML标签的字符串使用StringTokenizer
。但我不明白如何在这种情况下使用StringTokenizer。因为当我使用str.replaceAll("\\<.*?>","")
时,删除所有标记效率不高,因为某些标记将位于字符串的下一行,如上面的字符串所示。但我想要在<
和>
之间的所有情况下执行此操作。我该怎么做? (我想用StringTokenizer
实现它)。谢谢..
试图用正则表达式或StringTokenizer
处理HTML是痛苦的。
This answer是你进一步前的必读书。
如果你的HTML文件是简单的,你可能逃脱移除换行符,然后施加一个正则表达式,然后重新格式化HTML - 或尽量多的正则表达式。
但是你真的应该看看使用正确的HTML解析器。请参阅this question(可能还有其他许多...)
作为一般规则,除HTML解析库之外,不应使用任何其他解析方法解析HTML。编写您自己的解析器会产生安全风险,并将您的应用程序暴露给可能的攻击媒介,如跨站脚本和各种其他错误。再说一遍:不要用正则表达式或简单的标记器来解析HTML。此规则的一个例外情况是,如果您有一小组已知的HTML数据输入,并且您将在该数据上使用您的代码只有。在这种情况下,您可以并且应该验证您的代码是否为每个输入做了正确的事情。
这就是说,你的原始正则表达式非常接近。点通配符匹配除了换行符以外的所有内容,因此如果我们将除换行符通配符之外的换行符添加到正则表达式中,我们将在测试字符串中获得肯定的结果。
String result = str.replaceAll("<(.|\r|\n|\f)*?>","");
不要在未知输入中使用此代码!请勿将其用于生产!它不是一个安全或正确的方法来处理HTML。
+1正确警告解析HTML与正则表达式(需要我包含[义务链接](http://*.com/a/1732454/960195)?)。然而,跨站点脚本攻击是一类特定的错误,攻击者可以通过该错误诱骗用户的浏览器执行恶意代码(通常是JavaScript)。简单地解析HTML并不能让你知道XSS,因为你没有执行任何操作。 – 2012-03-03 03:59:54
最好使用HTML解析器库而不是StringTokenizer。请看看下面的演示:
- 下载jsoup-1.6.1.jar核心库从http://jsoup.org/download。
- 将此库添加到您的类路径中。
-
随你喜欢的HTML一起玩。下面的示例是将HTML内容转换为文本格式的代码:
import org.jsoup.Jsoup;
公共类的HTMLParser {
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)); }
}
A)你不应该使用'StringTokenizer'。正如文档所述,这是一个遗留类。B)试图用正则表达式解析HTML是徒劳的。 – 2012-03-02 23:29:38
@BrianRoach还有另外一个用于删除html标签的库JSon,但我无法使用其他库,并且似乎没有其他方法来实现它。 – El3ctr0n1c4 2012-03-02 23:32:57
为什么你不能使用其他库? – DNA 2012-03-02 23:43:28