2013-02-21 6 views
11

Derzeit arbeite ich an der Konvertierung von HTML-Codes mit entsprechenden Zeichen in Java. Ich muss den folgenden Code in Zeichen konvertieren.Ersetzen Sie HTML-Codes durch äquivalente Zeichen in Java

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

Ich versuchte, das RegexMuster mit

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

Wenn ich debuggen, matcher.find() gibt mir true aber die Steuerung überspringt die Schleife, wo ich den Code für die Konvertierung geschrieben haben. Ich weiß nicht, was dort passiert.

Gibt es auch eine Möglichkeit, diesen Regex zu optimieren?

Jede Hilfe wird geschätzt.

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) 
+2

Es ist bereits beantwortet :). [Empfohlene Methode zum Entkommen von HTML in Java] (http://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java) –

Antwort

25

Außerdem gibt es eine Möglichkeit, diese Regex zu optimieren?

Ja, nicht verwenden regex für diese Aufgabe verwenden Apache StringEscapeUtils von Apache commons lang:

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

JavaDoc sagt:

demaskiert einen String Einheit enthält, entkommt in einen String enthält die tatsächlichen Unicode-Zeichen, die den Escapezeichen entsprechen. Unterstützt HTML 4.0-Entitäten.

Zum Beispiel der Zeichenfolge "&lt;Fran&ccedil;ais&gt;" wird "<Français>"

werden, wenn ein Unternehmen nicht erkannt wird, wird allein gelassen, und wörtlich in den Ergebnisstring eingefügt. z.B. "&gt;&zzzz;x" wird ">&zzzz;x" werden.

+0

Intern wird eine Schleife über die übergebene Zeichenfolge ausgeführt und doppelter StringBuffer verwendet speichern Sie das Ergebnis. Möglicherweise würde ein vorkompilierter optimierter Regex das gewünschte Ergebnis mit besserer Leistung liefern. Was denken Sie? :) –

+1

@Quoi: Ich würde immer die Lösung verwenden, die ich gepostet habe, es sei denn, Profiling würde zeigen, dass dies ein Speicher- oder Runtime-Engpass ist, aber das war bisher noch nie der Fall, und ich bin mir ziemlich sicher, wird es nie sein. – jlordo

+0

Ich bekomme NumberFormatException für String 'A & B' –

1

Eine aller anderen Möglichkeiten oder bestehende util Methoden könnten Feder-Webs org.springframework.web.util.HtmlUtils.htmlUnescape sein.

Beispiel für die Verwendung in einem in sich geschlossenen Groovy Skript:

@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")