टी एल; डॉ
- आप regex वाक्यविन्यास उपयोग
replaceAll
या replaceFirst
जरूरत है,
- अगर आप चाहते हैं के रूप में शाब्दिक
replace
का उपयोग अपने target/replacement
जोड़ी इलाज किया जाना है (यह भी बदल देता है सभी आपके लक्ष्य की घटनाएं)।
replaceAll(String, String)
replaceFirst(String, String)
replace(CharSequence, CharSequence)
replace(char, char)
:
अधिकांश लोगों को स्ट्रिंग कक्षा में जगह तरीकों जो कर रहे हैं के दुर्भाग्यपूर्ण नामकरण से उलझन में रहे हैं
के बाद से replaceAll
विधि स्पष्ट रूप से दावा है कि यह सभी posible के लक्ष्यों को बदल देता है, लोगों को लगता है कि replace
विधि इस तरह के व्यवहार की गारंटी नहीं है नहीं है, क्योंकि यह All
प्रत्यय शामिल नहीं है।
लेकिन यह धारणा गलत है।
इन तरीकों के बीच मुख्य अंतर इस तालिका में दिखाया गया है:
╔═════════════════════╦═══════════════════════════════════════════════════════════════════╗
║ ║ replaced targets ║
║ ╠════════════════════════════════════╦══════════════════════════════╣
║ ║ ALL found ║ ONLY FIRST found ║
╠══════╦══════════════╬════════════════════════════════════╬══════════════════════════════╣
║ ║ supported ║ replaceAll(String, String) ║ replaceFirst(String, String) ║
║regex ╠══════════════╬════════════════════════════════════╬══════════════════════════════╣
║syntax║ not ║ replace(CharSequence, CharSequence)║ \/ ║
║ ║ supported ║ replace(char, char) ║ /\ ║
╚══════╩══════════════╩════════════════════════════════════╩══════════════════════════════╝
अब अगर आप रेगुलर एक्सप्रेशन से वाक्य रचना उपयोग विधि है जो यह उम्मीद नहीं करता है का उपयोग करने की जरूरत नहीं है, लेकिन यह target
और replacement
व्यवहार करता है शाब्दिक के रूप में।
तो बजाय replaceAll(regex, replacement)
उपयोग replace(literal, replacement)
।
जैसा कि आप देख replace
के दो अतिभारित संस्करण हैं। वे दोनों आपके लिए काम करना चाहिए क्योंकि वे रेगेक्स वाक्यविन्यास का समर्थन नहीं करते हैं।
replace(char target, char replacement)
बस नए स्ट्रिंग बनाता है और इसे भरने या तो मूल स्ट्रिंग से चरित्र के साथ, या चरित्र आप स्थानापन्न के रूप में फैसला किया (निर्भर करता है अगर यह चरित्र को लक्षित करने के बराबर था)
: उन दोनों के बीच मुख्य अंतर यह है कि है replace(CharSequence target, CharSequence replacement)
replaceAll(Pattern.quote(target), Matcher.quoteReplacement(replacement.toString())
जिसका अर्थ है कि यह replaceAll
रूप में ही है की अनिवार्य रूप से बराबर है लेकिन (जिसका अर्थ है वह आंतरिक रूप से regex इंजन का उपयोग करता है), लेकिन यह हमारे लिए target
और replacement
में स्वचालित रूप से इस्तेमाल किया regex अक्षरों से परे निकल जाता है
'replaceAll' के बजाय 'प्रतिस्थापन' का उपयोग करें। – Pshemo
@Pshemo: वे अलग व्यवहार करते हैं? – Jim
दस्तावेज़ीकरण पढ़ें ... 'प्रतिस्थापन (चार, चार)' और 'प्रतिस्थापन (स्ट्रिंग, स्ट्रिंग) है 'दोनों को आपके लिए काम करना चाहिए। – Pshemo