java - 具有 TagSoup 和不间断空格值的 Groovy XmlSlurper

标签 java string groovy xmlslurper tag-soup

我正在使用由 tagoup Parser 支持的 Groovy 的 XmlSlurper 解析一些 HTML4。

我成功获取了节点的 text(),但是 HTML   空格在尝试测试与另一个值的相等性时给我带来了一些困难。具体来说,.trim()实际上并没有修剪所有空格的字符串。在我看来,值两侧的字符都是空格(请参见下面的代码),但 String.trim() 并未按照我期望的方式进行修剪。从代码示例中可以看出,字符串中第一个字符的Character.isSpaceChar()被确定为空格字符。

为什么String.trim()不修剪我从XmlSlurper获得的这个值?

@Grab('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
import org.ccil.cowan.tagsoup.Parser

def html = '''
<html>
<body>
<span id="interested">&nbsp;hello&nbsp;</span>
</body>
</html>
'''

def slurper = new XmlSlurper(new Parser() )
def document = slurper.parseText(html)

def value = document.'**'.find { it['@id'] == 'interested' }.text()

println "value=[${value}]"
println "first char isWhitespace? ${Character.isWhitespace(value.charAt(0))}"
println "first char isSpaceChar? ${Character.isSpaceChar(value.charAt(0))}"
assert 'hello' == value.trim()

产量:

value=[ hello ]
first char isWhitespace? false
first char isSpaceChar? true
Exception thrown

Assertion failed: 

assert 'hello' == value.trim()
               |  |     |
               |  |      hello 
               |   hello 
               false

我正在使用Groovy 版本:2.3.6 JVM:1.8.0 供应商:Oracle Corporation 操作系统:Mac OS X

最佳答案

这里您已更正示例:

@Grab('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
import org.ccil.cowan.tagsoup.Parser

def html = '''
<html>
<body>
<span id="interested">&nbsp;hello&nbsp;</span>
</body>
</html>
'''

def slurper = new XmlSlurper(new Parser() )
def document = slurper.parseText(html)

def value = document.'**'.find { it['@id'] == 'interested' }.text()

println "value=[${value}]"
println "first char isWhitespace? ${Character.isWhitespace(value.charAt(0))}"
println "first char isSpaceChar? ${Character.isSpaceChar(value.charAt(0))}"
value = value.trim()
println "first char isWhitespace? ${Character.isWhitespace(value.charAt(0))}"
println "first char isSpaceChar? ${Character.isSpaceChar(value.charAt(0))}"
assert 'hello' == value.replaceAll(String.valueOf((char) 160), " ").trim()

解释可以参见 here (空格与不间断空格)。

关于java - 具有 TagSoup 和不间断空格值的 Groovy XmlSlurper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509092/

相关文章:

java - 在 robotium 中以时间格式转换字符串值

java - 如何在 Scala 中替换缓冲图像中的最低有效位

python - 动态拆分Python中的复杂字符串

groovy - GPars paralell写,什么时候写所有文件?

grails - 大括号与方括号

java - USACO 计算问题 - 无法找到或加载主要游乐设施

Java WindowBuilder 无法工作,显示空白设计页面

string - 在kotlin中将字符串转换为int列表

java - 检测鼠标悬停在 Graphics2D 字符串上

java - 计算字符列表中的两位数