这又是个看似简单却要折腾很久达不到完美效果的需求。
1.直接得到字符串,但丢失了换行
document.text()
2.解析p 解析h1 解析div 万一别人用的不是这3标签 或者彼此嵌套 都会存在问题,或者过几天改版了
或者干脆
document.select("*")
去重复过程去嵌套过程更麻烦甚至不可为,有的文本内容本来就是重复的,那么有没有保留换行的提取文本
3.保留换行的提取文本
Jsoup.clean(jsArticleDetail.toString(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
这个保留了换行但是网页网上的具体几个空格仍然不理想,那么只有把多余的空行换成\n了,虽然可能会替换原本确实存在的空格,但是是目前最接近需求的结果了
String baseContent = Jsoup.clean(jsArticleDetail.toString(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
String newText = baseContent.replaceAll("\\s+", "\n");
//去掉收尾多余的空格
String trueContent = newText.replaceFirst("\n", "").trim();
4.优化
我们可以再优化一下,当大于2个空格的时候我们再进行替换成\n,那文章中非要有2个多空格也没有更好的方法。 你也可以根据实际情况把2改为 其他数字 根据你解析的网页进行调整
String baseContent = Jsoup.clean(jsArticleDetail.toString(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
String newText = baseContent.replaceAll("\\s{2,}", "\n");
String trueContent = newText.replaceFirst("\n", "").trim();
特别感谢正则提供LX HAH