के रूप में कहा था कि आप परिणामों को त्यागकर और की जगह एक regex केवल एक शाब्दिक चार अनुक्रम नहीं ले रहे हैं को बदला जाएगा ताकि आप डॉन ' टी कोई अजीब सुनिश्चित करने के लिए Matcher.quoteReplacement(String)
सीमांकक
लेकिन replaceAll और replaceFirst एक regex स्ट्रिंग लेते हैं (बुरा डिजाइन कि)
में से बचने के लिए की जरूरत है और एक अलग रूप में के रूप में यह Patter.quote(String)
उपयोग करने के लिए सलाह दी जाती है और जब regex का उपयोग कर बातें हो रही हैं (यह थोड़ा आसान है और वहाँ कोई त्रुटि है सुनिश्चित करता है वर्ण से बचने में)
यहाँ जब केवल एक घटना बदला जाना चाहिए
String delimiter = "**";
String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>";
Map<String, String> mp = new HashMap<String, String>();
mp.put("USERNAME", "User A");
mp.put("PASSWORD", "B");
for (Map.Entry<String, String> entry : mp.entrySet()) {
html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue());
}
के लिए है और यहाँ है जब अनेक गतिविधियां बदला जाना चाहिए के लिए
String delimiter = "**";//unescaped because I'm handling that in my replace
String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>";
Map<String, String> mp = new HashMap<String, String>();
mp.put("USERNAME", "User A");
mp.put("PASSWORD", "B");
for (Map.Entry<String, String> entry : mp.entrySet()) {
html = html.replaceAll(Pattern.quote(delimiter + entry.getKey()+ delimiter), Matcher.quoteReplacement(entry.getValue()));
}
स्रोत
2011-06-02 19:42:34
तुम्हें कैसे पता कि यह काम नहीं कर रहा हो? आप इसे कहीं भी प्रिंट या स्टोर नहीं कर रहे हैं। – CoolBeans