在Java中清理由html /服务器端标记组成的字符串

时间:2010-04-03 11:06:27

标签: java html

我的文字如下:

我明天和这个人约会。好吧我和其他成千上万的人。 &lt; br /&gt;&lt; br /&gt;&lt; img src =“http://www.newwest.net/images/thumbnails_feature/barack_obama_westerners.jpg"><br /&gt;&lt; br /&gt;明天早上我将在愚蠢的时候起床并开车去曼彻斯特, NH看到巴拉克奥巴马说话。&lt; br /&gt;&lt; br /&gt;你们都应该来吧!&lt; br /&gt;&lt; br /&gt;&lt; a href =“http://nh.barackobama.com/manchesterchange">RSVP了事件&LT; / A&GT;

我也想要清理它:

  

我和这个家伙约会了   明天。好吧,我和成千上万   其他   http://www.newwest.net/images/thumbnails_feature/barack_obama_westerners.jpg   明天早上我   将是愚蠢的起床   时间和开车到   新罕布什尔州曼彻斯特看巴拉克奥巴马   你说的   应该也来!   h ** p://nh.barackobama.com/manchesterchange RSVP   对于该事件

我想为此编写一个JAVA程序。任何指针/建议都将被理解。标签不限于上述帖子。这只是一个例子。

谢谢!

PS:在第二个超链接中用t替换*,因为Stack Overflow不允许我发布多个链接。

3 个答案:

答案 0 :(得分:1)

JTidy会做你想要的。我只是通过将帖子中的文本块保存为test.txt来尝试它,并使用以下选项运行JTidy:

java -jar jtidy-r938.jar -asxml test.txt >test.html

它产生了以下格式良好的XHTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator"
content="HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net" />
<title></title>
</head>
<body>
I've got a date with this fellow tomorrow. Well me and thousands of
others. <br />
<br />
<img
src="http://www.newwest.net/images/thumbnails_feature/barack_obama_westerners.jpg" /><br />
<br />
Tomorrow morning I will be getting up at stupid o'clock and driving
up to Manchester, NH to see Barak Obama speak. <br />
<br />
You all should come too!<br />
<br />
<a href="http://nh.barackobama.com/manchesterchange">RSVP for the
event</a>
</body>
</html>

如果您使用API​​而不是命令行,您将能够提取您感兴趣的位并丢弃其余位。

答案 1 :(得分:0)

我会查看一个HTML解析器,例如JTidy。尽管它的名称,它将解析HTML并提供一个有用的API,以便您提取所需的内容。

答案 2 :(得分:0)

“整理”具有XML标签的文本的最简单方法是使用正则表达式来标识任何标签(即以“&lt;”开头并以“&gt;”结尾的任何内容以及其间的所有内容) 。请注意,无论XML是否格式正确,因此无论开放标记是否与结束标记匹配,它都会清除任何标记。

例如,

String noXmlString = xmlString.replaceAll("\\<.*?\\>", "");

将删除给定字符串中的所有标记。缺点是它不会保留图像链接,也不会根据您的示例保留超链接。希望这会有所帮助!

编辑于11:58 04/04/10:尝试此操作以删除HTML编码的HTML标记(即以&lt;开头并以&gt;结尾的任何内容)...

String noHtmlHtmlString = htmlHtmlString.replaceAll("&lt;.+?&gt;", "");

然后删除任何其他HTML编码/格式化的位,例如&quot;(即任何以&amp;开头并以其结束的内容;并且在其间符合有效字而没有空格或中断)使用

String noHtmlEncodingString = htmlEncodingString.replaceAll("&\\w+?;", "");

如果存在任何格式错误的HTML / XML,除非存在已知模式,否则无法捕获它们。