2013-02-21 15 views
11

Şu anda, HTML kodlarını java'daki eşdeğer karakterlerle dönüştürme üzerinde çalışıyorum. Aşağıdaki kodu karakterlere dönüştürmem gerekiyor. Ben hata ayıklama HTML kodlarını, eşdeğer karakterlerle değiştir Java

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

Ben düzenli ifade deseni

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

kullanarak çalıştı, matcher.find() bana true verir ama kontrolü ben dönüşüm için kod yazdım döngü atlar. Orada neler olduğunu bilmiyorum.

Ayrıca, bu düzenli ifadeyi optimize etmenin herhangi bir yolu var mı?

Herhangi bir yardım için teşekkür ederiz.

İstisna

Ayrıca
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

Zaten cevaplanır :). [Java'da HTML'den kaçınmak için önerilen yöntem] (http://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java) –

cevap

25

, bu regex optimize etmek herhangi bir yolu var mı?

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

javadoc diyor:

varlık içeren bir dize çıkış karakterini bir dizeye kaçar

Evet, Apache commons lang gelen Apache StringEscapeUtils kullanmak bu görev için regex kullanmayın , çıkışlara karşılık gelen gerçek Unicode karakterlerini içerir. HTML 4.0 varlıkları destekler.

Örneğin, dize "&lt;Fran&ccedil;ais&gt;""<Français>"

bir varlık tanınmayan ise, yalnız bıraktı ve sonuç dizesine aynen takıldığından hale gelecektir. Örneğin. "&gt;&zzzz;x", ">&zzzz;x" haline gelir.

+0

İçten geçirilen dizinin üzerine döngü yapar ve çift boyutlu stringBuffer'ı kullanır. sonucu sakla. Önceden derlenmiş optimize edilmiş bir regex, daha iyi performansla istenen sonucu verir. Ne düşünüyorsun? :) –

+1

@Quoi: Profilleme, bunun bir bellek veya çalışma zamanı darboğazı olduğunu göstermediği sürece her zaman gönderdiğim çözümü kullanırdım, ancak bu hiçbir zaman böyle değildi ve kesinlikle emin olamayacağım. – jlordo

+0

'A & B' –

1

diğer tüm olasılıklar Bir veya util yöntemleri mevcut yay web sitesinin org.springframework.web.util.HtmlUtils.htmlUnescape olabilir. Kendi kendine yeten Groovy senaryoda

Örnek kullanım:

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