用Java中的等效字符替换HTML代码

时间:2013-02-21 09:31:48

标签: java pattern-matching matcher

目前我正致力于在java中使用等效字符转换HTML代码。 我需要将以下代码转换为字符。

è - è
®   - ®
& - &
ñ - ñ
&   - &

我尝试使用正则表达式

(&#x)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)(;)

当我调试时,matcher.find()给了我true,但控件跳过了我编写转换代码的循环。不知道那里发生了什么。

另外,有没有办法优化这个正则表达式?

感谢任何帮助。

异常

java.lang.NumberFormatException: For input string: "x26"
      at java.lang.NumberFormatException.forInputString(Unknown Source)
      at java.lang.Integer.parseInt(Unknown Source)
      at java.lang.Integer.parseInt(Unknown Source)
      at org.apache.commons.lang.Entities.unescape(Entities.java:683)
      at org.apache.commons.lang.StringEscapeUtils.unescapeHtml(StringEscapeUtils.java:483)

2 个答案:

答案 0 :(得分:26)

  

另外,有没有办法优化这个正则表达式?

是,不使用正则表达式执行此任务,请使用StringEscapeUtils中的Apache Apache commons lang

import org.apache.commons.lang.StringEscapeUtils;
...
String withCharacters = StringEscapeUtils.unescapeHtml(yourString);

JavaDoc说:

  

将包含实体转义符的字符串转义为包含的字符串   与转义对应的实际Unicode字符。支持   HTML 4.0实体。

     

例如,字符串"&lt;Fran&ccedil;ais&gt;"将变为"<Français>"

     

如果实体无法识别,则将其保留,并逐字插入结果字符串。例如"&gt;&zzzz;x"将成为">&zzzz;x"

答案 1 :(得分:1)

所有其他可能性或现有的 util 方法之一可能是spring-web&#39; org.springframework.web.util.HtmlUtils.htmlUnescape

自包含Groovy脚本中的示例用法:

@Grapes(
    @Grab(group='org.springframework', module='spring-web', version='4.3.0.RELEASE')
)
import org.springframework.web.util.HtmlUtils

println HtmlUtils.htmlUnescape("La &#xE9;lite del tenis no teme al zika y jugar&#xE1; en R&#xED;o")