2013-02-21 58 views
11

में समकक्ष वर्णों के साथ एचटीएमएल कोड बदलें। वर्तमान में मैं जावा में समकक्ष वर्णों के साथ एचटीएमएल कोड को परिवर्तित करने पर काम कर रहा हूं। मुझे नीचे दिए गए कोड को वर्णों में कनवर्ट करने की आवश्यकता है।जावा

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

मैं regex पैटर्न

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

यह पहले से ही उत्तर दिया जाता है :)। [जावा में एचटीएमएल से बचने के लिए अनुशंसित विधि] (http://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java) –

उत्तर

25

इसके अलावा, वहाँ इस regex अनुकूलन करने के लिए किसी भी तरह से है?

हाँ, इस कार्य के लिए regex का उपयोग नहीं करते, Apache commons lang से अपाचे StringEscapeUtils का उपयोग करें:

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

JavaDoc का कहना है:

एक स्ट्रिंग इकाई युक्त Unescapes एक स्ट्रिंग के लिए निकल जाता है जिसमें भाग निकलने के लिए संबंधित वास्तविक यूनिकोड वर्ण हैं। एचटीएमएल 4.0 इकाइयों का समर्थन करता है।

उदाहरण के लिए, स्ट्रिंग "&lt;Fran&ccedil;ais&gt;""<Français>"

एक इकाई गैर मान्यता प्राप्त है, तो उसे अकेला छोड़ दिया जाता है, और परिणाम स्ट्रिंग में शब्दशः डाला हो जाएगा। जैसे "&gt;&zzzz;x"">&zzzz;x" बन जाएगा।

+0

आंतरिक रूप से यह पारित स्ट्रिंग पर लूप करता है और डबल आकार के स्ट्रिंग बफर का उपयोग करता है परिणाम स्टोर करें। संभावित रूप से एक पूर्व संकलित अनुकूलित रेगेक्स आपको बेहतर प्रदर्शन के साथ वांछित परिणाम देगा। तुम क्या सोचते हो? :) –

+1

@Quoi: मैं हमेशा पोस्ट किए गए समाधान का उपयोग करता हूं, जब तक प्रोफाइलिंग दिखाएगी कि यह एक स्मृति या रनटाइम बाधा है, लेकिन यह अब तक का मामला नहीं था और मुझे पूरा यकीन है कि कभी नहीं होगा। – jlordo

+0

मुझे स्ट्रिंग 'ए & बी' –

1

अन्य सभी संभावनाओं में से एक या मौजूदा util तरीकों वसंत-वेब के org.springframework.web.util.HtmlUtils.htmlUnescape हो सकता है। एक आत्म निहित ग्रूवी लिपि में

उदाहरण उपयोग:

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