我有相当多的文件(大约600个),其中包含我用Jsoup抓取的文本。该文本仅包含<p>
和<br>
中的HTML,以尝试保留文本中段落的一些内容。问题是在某些文件中有一长串新行,由Java读取为字符10.在某些情况下,有大约30个左右,就像有人按下Enter键而卡住了。
我知道由于<br>
标签而在线断开是我的错,但是找不到一种方法可以保留一个换行符并在刮擦时丢弃其余的换行符。
这是我正在使用的Jsoup代码的一部分(来自How do I preserve line breaks when using jsoup to convert html to plain text?)
Document document = Jsoup.connect(url).get();
document.outputSettings(new Document.OutputSettings().prettyPrint(false));//preserve html linebreaks
document.select("br").append("\\n");
document.select("p").prepend("\\n\\n");
document.select(":containsOwn(\u00a0)").remove();
String s = document.html().replaceAll("\\\\n", "\n");
String txtOnly = Jsoup.clean(s, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
是否有可能以某种方式清除文件的内容而不实际重新运行抓取过程?我已经尝试使用HashSet,以便只保留一个字符10,然后当到达行尾时,打印集合中唯一的字符10。但它并没有以某种方式发挥作用。
有关如何做到这一点的任何好的指示吗?
答案 0 :(得分:1)
在HTML中,所有包含1个或多个空格字符的序列(包括像字符10s这样的换行符)相当于一个空格。您可以使用正则表达式将空格字符的运行替换为单个空格。 然后进行替换,在适当的位置插入换行符。
public static void processHtml(String html) {
html = normalizeHtmlWhitespace(html);
html = html.replace("<br>", "\n");
// more robust code would use a real HTML parser to do the <br> replacement
}
public static String normalizeHtmlWhitespace(String html) {
return html.replaceAll("\\s+", " ");
}