【问题标题】:java - handling &nbsp as a stringjava - 将 &nbsp 作为字符串处理
【发布时间】:2014-08-31 09:40:03
【问题描述】:

如何将我从 HTML 文件中解析的 &nbsp 字符替换为 " " ? 关于这个有很多问题和“接受”的答案,

How to remove   with Jsoup?

How to remove " " from java string

Handling special entities like & nbsp; , & pound; in HtmlCleaner

但我仍然没有通过使用这些链接中给出的所有解决方案来解决这个问题,

if(tr.text().replace("\u00a0", "").isEmpty()){
    System.out.println("testing---");
}

我在这里做错了什么? 这种场景可以使用jsoup吗?我在其中一个答案中读到了这一点。

更新 这是我试图从中获取数据的 HTML 部分。

<TR>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boBL noWrap>&nbsp;</TD>
    <TD class=xl27boL noWrap align=right>&nbsp;</TD>
</TR>

【问题讨论】:

  • 我已经更新了问题
  • 你是说 noWrop 东西导致了问题吗?
  • 不,实际上,JSoup 确实可以容忍无效的 HTML —— 这是它的一大优点。

标签: java web-scraping jsoup


【解决方案1】:

answer given here 工作正常。 isEmpty 得到 false 的原因是 tr 元素的文本不包含 only&amp;nbsp; 字符 - 其中还有其他空白字符。您需要添加一个trim 呼叫:

if(tr.text().replace("\u00a0", "").trim().isEmpty()){
// Here --------------------------^^^^^^^
    System.out.println("testing---");
}

当我将您的示例 HTML 运行到 JSoup 中时,我通过查看 tr.text() 返回的文本就知道了这一点;基本调试。

【讨论】:

  • 嗨,先生,它仍然不适合我,我有两个 TR 标签,在第一个 TR 标签中,最后一个 TD 中有一个 &nbsp,在下一个 TR 标签中,我所有的 TD 都带有 &nbsp .通过添加 trim() (我在发布问题之前已经尝试过),只有第一个 TR 的最后一个 TD 被 & nbsp 检测到,而不是下一个在其 TD 中包含所有 &nbsp 的 TR。希望我很清楚
  • jsoup 真的需要这个吗?正则表达式不会吗?
  • @VasanthNagKV:那么不知道问题出在哪里;我将您的 HTML 复制并粘贴到一个文件中,使用 JSoup 加载该文件,运行上面的代码,并为 isEmpty 获得了 true。您必须使用调试器逐步完成并弄清楚它是什么。我 99.9% 确定它与 &amp;nbsp; 无关。不难发现,只要检查一下你从tr.text()回来的字符串就行了。
  • System.out.println("the string is "+ tr.text()) - 这给出了一个空行作为输出:(
  • @VasanthNagKV:不要使用System.out.println 进行调试,使用调试器 进行调试。我预计那里可能有空格,或者其他在转储到控制台时不明显的字符。
【解决方案2】:

从 Jsoup 获取文档后使用 StringEscapeUtils

StringEscapeUtils.unescapeHtml4(test));

使用这个库 org-apache-commons-lang.jar。

【讨论】:

    【解决方案3】:

    对于更简单的解决方案,您可以使用现有的

    java.lang.string.trim();
    

    您可以使用它来实现它

     WebUI.getText().trim();
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2016-08-30
      • 2013-01-27
      • 2020-10-27
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多