के लिए सिंगल कोट्स से बचने के लिए सामान्य रूप से मैसेजिंगफॉर्मैट के बारे में पहले से ही कई प्रश्न हैं, लेकिन मुझे अभी तक कुछ भी नहीं मिला है जो मेरे प्रश्न का उत्तर देता है। मुझे पता है, कि एकल उद्धरण पैटर्न तोड़ देंगे। यदि आप MessageFormat या Log4j का उपयोग करते हैं जैसे "नहीं" संभावित प्लेसहोल्डर्स को तोड़ सकता है।जावा संदेशफॉर्मैट
सरल उदाहरण:
@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" संभाल लेंगे ...?
नहीं, StringEscapeUtils.escapeEcmaScript() संदेशफॉर्मेट/लॉगिंग को तोड़ देगा। (आउटपुट: प्रतिस्थापित सिंगलक्वॉट्स: टेस्टपैटर मूल्य नहीं दिखाता है ({1}, {2}, {3}, {4}) – proko