2016-11-18 6 views
5

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

हालांकि, जब मैं इसे चलाता हूं तो मुझे प्रतिस्थापित स्ट्रिंग के बजाय मूल स्ट्रिंग मिलती है। मैं क्या गलत कर रहा हूं?

+0

क्या आप स्ट्रिंग इंटरपोलेशन करने की कोशिश कर रहे हैं, या उदाहरण बस ऐसा दिखता है? यदि ऐसा है, तो [MessageFormat] देखें (https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html) –

उत्तर

7

बस अगली के रूप में दिए गए CharSequence को बदलने के लिए, अपने मामले में String#replace(CharSequence target, CharSequence replacement) का उपयोग करें:

special = special.replace("@$", "as"); 

या Pattern.quote(String s) का उपयोग परिवर्तित करने के लिए अपने String एक शाब्दिक पैटर्न String के रूप में, अगले के रूप में:

special = special.replaceAll(Pattern.quote("@$"), "as"); 

यदि आप इसे अक्सर करने का इरादा रखते हैं, तो संबंधित Pattern इंस्टेंस का उपयोग करने पर विचार करें (कक्षा Pattern थ्रेड-सुरक्षित है जिसका अर्थ है कि आप इस वर्ग के उदाहरण साझा कर सकते हैं) ताकि प्रत्येक कॉल पर आपकी नियमित अभिव्यक्ति को संकलित करने से बचें प्रदर्शन की अवधि।

तो अपने कोड हो सकता है:

private static final Pattern PATTERN = Pattern.compile("@$", Pattern.LITERAL); 
... 
special = PATTERN.matcher(special).replaceAll("as"); 
5

एस्केप वर्ण: -

String special = "Something @$ great @$ that."; 
    special = special.replaceAll("@\\$", "as"); 
    System.out.println(special); 

नियमित अभिव्यक्ति के लिए, 12 अक्षर नीचे अक्षरों से परे के रूप में बुलाया आरक्षित हैं। यदि आप इन वर्णों में से किसी एक को रेगेक्स में शाब्दिक के रूप में उपयोग करना चाहते हैं, तो आपको बैकस्लैश से बचने की आवश्यकता है।

the backslash \ 
the caret^
the dollar sign $ 
the period or dot . 
the vertical bar or pipe symbol | 
the question mark ? 
the asterisk or star * 
the plus sign + 
the opening parenthesis (
the closing parenthesis) 
the opening square bracket [ 
and the opening curly brace { 

संदर्भ: - http://www.regular-expressions.info/characters.html

0

ध्यान दें कि पहली बार दिया पैरामीटर एक स्ट्रिंग आप बदलना चाहते हैं नहीं है। यह एक नियमित अभिव्यक्ति है। आप एक नियमित अभिव्यक्ति बनाने की कोशिश कर सकते हैं जो उस स्ट्रिंग से मेल खाता है जिसे आप on this site को प्रतिस्थापित करना चाहते हैं।

special = special.replaceAll("\\@\\$", "as"); काम करेगा, के रूप में @Mritunjay

0
special = special.replaceAll("\\W","as"); 

काम करता है विशेष वर्ण।

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