17

現在、HTMLコードをJavaで同等の文字に変換する作業を行っています。以下のコードを文字に変換する必要があります。

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

正規表現パターンを使用してみました

(&#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)
4

2 に答える 2

33

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

はい、このタスクには正規表現を使用しないでください。Apache commons langの Apache StringEscapeUtilsを使用してください。

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"ます。

于 2013-02-21T09:34:20.447 に答える
3

他のすべての可能性または既存のutilメソッドの 1 つは、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")
于 2016-06-25T19:03:27.187 に答える