我在Java中有以下内容,我只想删除html标签而不是新行字符
<p>test1 <b>test2</b> test 3 </p> //line 1
<p>test4 </p> //line 2
如果我在文本丰富的编辑器中打开上面的内容,则第1行和第2行显示在不同的行中(不显示</p>
标记)。但是记事本内容与</p>
标记一起显示。删除我使用的所有html标签
Jsoup.parse(aboveContent).text()
删除所有html字符。但它在记事本中显示了同一行中的所有第1行和第2行。不知怎的,Jsoup还删除了换行符。
我尝试了什么: -
我还尝试用</p>
替换\r\n
,然后删除html标记
Jsoup.parse(contentWith\r\n-Insteadof-</p>Tag ).text()
但是Jsoup仍然在同一行中删除行尾字符(如在调试器中我可以看到line1和line2)。
如何让Jsoup只删除html字符而不是新行字符?
答案 0 :(得分:13)
你也可以这样做:
public static String cleanNoMarkup(String input) {
final Document.OutputSettings outputSettings = new Document.OutputSettings().prettyPrint(false);
String output = Jsoup.clean(input, "", Whitelist.none(), outputSettings);
return output;
}
这里重要的事情是: 1. Whitelist.none() - 所以不允许加标 2..prettyPrint(false) - 因此不会删除换行符
答案 1 :(得分:4)
您获得一行,因为text()
删除了所有空格字符。
但您可以使用StringBuilder
并在那里插入每一行:
final String html = "<p>test1 <b>test2</b> test 3 </p>"
+ "<p>test4 </p>";
Document doc = Jsoup.parse(html);
StringBuilder sb = new StringBuilder();
for( Element element : doc.select("p") )
{
/*
* element.text() returns the text of this element (= without tags).
*/
sb.append(element.text()).append('\n');
}
System.out.println(sb.toString().trim());
<强>输出:强>
test1 test2 test 3
test4