web-dev-qa-db-ja.com

Java内の同等の文字でHTMLコードを置き換えます

現在、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)
_
13
Raja Asthana

また、この正規表現を最適化する方法はありますか?

はい、このタスクには正規表現を使用しないでください、Apache StringEscapeUtils を使用 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"

28
jlordo

他のすべての可能性の1つまたは既存のtilメソッドは、spring-webの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")
3
Michal M