在 java 中,使用 stringName.contains() 不适用于特殊字符代码

In java, using stringName.contains() isn't working with special character codes

我正在使用一个包含单词 "Español" 的 HTML 文档,但是在源代码中它被写为 "Espa&# 241;ol"(添加了 Space 所以它不是由您的浏览器自动更改)

如果我这样做,"Español" 找不到:

        if (source.contains("Español")) 
        System.out.println("Found it");

如果我这样做,就会找到这个词:

        if (source.contains("Español")) 
        System.out.println("Found it");

任何人都可以深入了解正在发生的事情吗?

上面一段代码对 ñ 字符使用 HTML 编码,下面一段没有。 .contains() 方法搜索确切的输入字符串,这意味着顶部的代码正在搜索 exact 字符串 "Espa&# 241;ol",但无法找到,因为它是不在字符串源中。

从HTML获取文本后,需要先将HTML转义字符(如ñ)转换为Unicode字符(ñ)。好的方法是使用 Apache Commons Lang library

你的情况:

input = StringEscapeUtils.unescapeHtml4(input);

将执行 HTML->Unicode 转换。

您需要在检查之前取消转义字符。

引用 Kevin Hakanson's answer from this question.

You can use the Apache Commons StringEscapeUtils.unescapeHtml4() for this.

因此,在您的情况下,如果您添加了 Apache Commons Lang 库,则以下代码片段应该可以按预期工作:

if (source.contains(StringEscapeUtils.unescapeHtml4("Español"))) 
    System.out.println("Found it");