web-dev-qa-db-fra.com

Remplacer les codes HTML par des caractères équivalents en Java

Actuellement, je travaille sur la conversion de codes HTML avec des caractères équivalents en Java. Je dois convertir le code ci-dessous en caractères.

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

J'ai essayé d'utiliser le motif regex 

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

Lorsque je débogue, matcher.find() me donne true mais le contrôle ignore la boucle dans laquelle j'ai écrit le code de conversion. Je ne sais pas ce qui se passe là-bas. 

Aussi, y a-t-il un moyen d'optimiser cette regex?

Toute aide est appréciée.

Exception

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)
11
Raja Asthana

Aussi, y a-t-il un moyen d'optimiser cette regex?

Oui, ne pas utiliser regex pour cette tâche, utilisez Apache StringEscapeUtils from Apache commons lang :

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

JavaDoc dit:

Unescapes une chaîne contenant une entité échappe à une chaîne contenant Les caractères Unicode réels correspondant aux échappements. Prend en charge les entités HTML 4.0.

Par exemple, la chaîne "&lt;Fran&ccedil;ais&gt;" deviendra "<Français>"

Si une entité n'est pas reconnue, elle est laissée seule et insérée textuellement dans la chaîne de résultat. par exemple. "&gt;&zzzz;x" deviendra ">&zzzz;x".

26
jlordo

Une des possibilités ou méthodes util existantes pourrait être org.springframework.web.util.HtmlUtils.htmlUnescape de spring-web.

Exemple d'utilisation dans un script Groovy autonome:

@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")
1
Michal M