在 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");
我正在使用一个包含单词 "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");