2013-07-09 5 views
6

के लिए सिंगल कोट्स से बचने के लिए सामान्य रूप से मैसेजिंगफॉर्मैट के बारे में पहले से ही कई प्रश्न हैं, लेकिन मुझे अभी तक कुछ भी नहीं मिला है जो मेरे प्रश्न का उत्तर देता है। मुझे पता है, कि एकल उद्धरण पैटर्न तोड़ देंगे। यदि आप MessageFormat या Log4j का उपयोग करते हैं जैसे "नहीं" संभावित प्लेसहोल्डर्स को तोड़ सकता है।जावा संदेशफॉर्मैट

Within a String, a pair of single quotes can be used to quote any arbitrary characters except single quotes. For example, pattern string "'{0}'" represents string "{0}", not a FormatElement. A single quote itself must be represented by doubled single quotes '' throughout a String देखें।

सरल उदाहरण:

@Test 
public void test() { 
    String pattern = "{0} doesn't show values ({1}, {2}, {3}, {4})"; 
    final Object[] args = { "Testpattern", 100, 200, 300, 400 }; 
    System.out.println(MessageFormat.format(pattern, args)); 
    pattern = pattern.replaceAll("(?<!')'(?!')", "''"); 
    System.out.println("Replaced singlequotes: " + MessageFormat.format(pattern, args)); 
} 

आउटपुट:

Testpattern doesnt show values ({1}, {2}, {3}, {4}) 
Replaced singlequotes: Testpattern doesn't show values (100, 200, 300, 400) 

तो, अगर मैं एक regular expression का उपयोग करके सभी एकल उद्धरण की जगह है, यह काम करेंगे। मैंने नियमित अभिव्यक्ति लुकहेड/लुकहेइंड का उपयोग करके केवल "एकल सिंगलक्वॉट्स" को प्रतिस्थापित करने की कोशिश कर रहे नियमित अभिव्यक्ति को बनाया है।

नियमित अभिव्यक्ति की जगह उदाहरण:

doesn't -> doesn''t 
    doesn''t -> doesn''t 
    doesn'''t -> doesn'''t 

मैं बस, आश्चर्य किसी भी अपाचे-कॉमन्स उपयोगिता (या किसी अन्य पुस्तकालय), मौजूद है, तो जो बजाय अपने ही नियमित अभिव्यक्ति प्रदान करने के लिए मेरे लिए "escapeSingleQuotes" संभाल लेंगे ...?

उत्तर

3

जब से मैं एक और एपीआई जो बच गए Singlequote प्रदान करेगा ('नहीं मिला है -> '') मैं एम के साथ रहूंगा वाई नियमित अभिव्यक्ति। एकल उद्धरण के बजाय

`doesn''t` 
0

अपाचे कॉमन्स लैंग पैकेज से escapeEcmaScript विधि का उपयोग करें।

देखें स्टैक ओवरफ़्लो सवाल:

+1

नहीं, StringEscapeUtils.escapeEcmaScript() संदेशफॉर्मेट/लॉगिंग को तोड़ देगा। (आउटपुट: प्रतिस्थापित सिंगलक्वॉट्स: टेस्टपैटर मूल्य नहीं दिखाता है ({1}, {2}, {3}, {4}) – proko

8

यह मुझे इस तरह कुछ करने के लिए मदद की।

+0

हां यह काम करता है यदि आप एकल उद्धरण और संदेशफॉर्मैट से अवगत हैं। लेकिन डेवलपर्स पर भरोसा करते हुए एक ढांचा प्रदान करना हमेशा दो उद्धरण लिखना कोई अच्छा विकल्प नहीं है। – proko

+0

आईसीयू की सिफारिश एएससीआईआई एस्ट्रोफ़े ('यू +0027) का उपयोग केवल वाक्यविन्यास पात्रों से बचने के लिए है, और वास्तविक पैटर्न के लिए सुंदर सिंगल कोट (' यू + 201 9) और संदेश पैटर्न में एकल उद्धरण का उपयोग करना है। –

2

हर किसी कि string.xml, का उपयोग में एंड्रॉयड समस्या है के लिए \ '\':

3

आईसीयू से सिफारिश एएससीआईआई एस्ट्रोफ़े ('यू +0027) का उपयोग केवल वाक्यविन्यास पात्रों से बचने के लिए है, और वास्तविक पैटर्न के लिए सुंदर सिंगल कोट (' यू + 201 9) और संदेश पैटर्न में एकल उद्धरण का उपयोग करना है।

+0

हां, यह वास्तव में मदद करेगा। हमारा ढांचा एक लॉगर प्रदान करता है और इसे सिंगल कोट्स से अवगत होना चाहिए और संदेश प्रारूप को तोड़ना नहीं चाहिए।चूंकि अन्य लोग लॉगर का उपयोग कर सकते हैं, इसलिए यदि प्रत्येक डेवलपर उचित उद्धरण का उपयोग कर रहा है तो हम नियंत्रण नहीं कर सकते हैं। – proko

संबंधित मुद्दे