gpt4 book ai didi

java - Jsoup.parse().text() 添加不需要的空格

转载 作者:行者123 更新时间:2023-12-01 10:07:33 27 4
gpt4 key购买 nike

我正在尝试清理一个字符串,从中删除所有 html 标签,所以这是我的代码:

System.out.println("Result:" + Jsoup.parse("Dani<div></div>el").text());    

结果是

Result:Dani el

应该是结果:丹尼尔

根据 Jsoup 代码,我发现“问题”出在该方法的 org.jsoup.nodes.Element 中:

public String text() {
final StringBuilder accum = new StringBuilder();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
appendNormalisedText(accum, textNode);
} else if (node instanceof Element) {
Element element = (Element) node;
if (accum.length() > 0 &&
(element.isBlock() || element.tag.getName().equals("br")) &&
!TextNode.lastCharIsWhitespace(accum))
accum.append(" ");
}
}

public void tail(Node node, int depth) {
}
}).traverse(this);
return accum.toString().trim();
}

当在某个时刻有accum.append("");。很明显,在某些情况下, block html 标签在相应的文本版本中添加一个空格是很方便的;但在某些情况下事实并非如此。就我而言,事实上结果是错误的。

我认为 text() 方法有一个 boolean 参数 preserveWhiteSpaces 来启用或禁用行 accum.append(""); 的执行会很好。我希望 Jsoup 的开发人员可以考虑这个请求:我看到其他人也有这个空格问题。

如果有人有一些好主意可以在不改变 Jsoup 源的情况下解决问题,欢迎。

最佳答案

I'm trying to clean a String removing all html tags from it,

您想要使用clean()方法。

示例代码

System.out.println("Result:" + Jsoup.clean("Dani<div></div>el", Whitelist.none()));

输出

Result:Daniel
<小时/>

In my case however the result is wrong. Do you have some suggestion to solve this problem?

您可以使用自定义 NodeVisitor 实例化 NodeTraversor

只是给你一个想法:

private static String toText(Element element) {
final StringBuilder accum = new StringBuilder();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
accum.append(textNode.getWholeText());
} else if (node instanceof Element) {
// Do nothing ...
}
}

public void tail(Node node, int depth) {
}
}).traverse(element);

return accum.toString().trim();
}

示例代码

public static void main(String[] args) {
System.out.println("Result:" + toText(Jsoup.parse("Dani<div></div>el")));
}

输出

Result:Daniel

关于java - Jsoup.parse().text() 添加不需要的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36340222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com