"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावा में \"test\"।replaceAll(\"।\", \"a\") का परिणाम \"aa\" क्यों होता है?

जावा में \"test\"।replaceAll(\"।\", \"a\") का परिणाम \"aa\" क्यों होता है?

2024-11-10 को प्रकाशित
ब्राउज़ करें:712

Why Does \

स्ट्रिंग रिप्लेसऑल एनोमली: ".*" के साथ डबल रिप्लेसमेंट

जावा में, String.replaceAll() विधि एक वैश्विक खोज करती है और रेगुलर एक्सप्रेशन का उपयोग करके किसी दिए गए स्ट्रिंग पर ऑपरेशन को बदलें। हालाँकि, ".*" रेगेक्स पैटर्न का उपयोग करते समय एक अप्रत्याशित व्यवहार उत्पन्न होता है, जिससे दोहरे प्रतिस्थापन की समस्या उत्पन्न होती है।

प्रश्न एक परिदृश्य प्रस्तुत करता है जहां "test"।replaceAll("।", "a ") परिणाम के रूप में "आ" उत्पन्न होता है। ऐसा इसलिए है क्योंकि . एक लालची क्वांटिफायर है जो किसी भी संख्या में वर्णों (शून्य सहित) से मेल खाता है, शुरू में संपूर्ण इनपुट स्ट्रिंग को कैप्चर करता है। परिणामस्वरूप, पहला प्रतिस्थापन संपूर्ण स्ट्रिंग को "a" से बदल देता है।

हालाँकि, . एक खाली स्ट्रिंग से भी मेल खा सकता है। प्रारंभिक प्रतिस्थापन के बाद, इनपुट के अंत में शेष खाली स्ट्रिंग . के मिलान के रूप में भी अर्हता प्राप्त करती है। इस प्रकार, एक दूसरा प्रतिस्थापन होता है, खाली स्ट्रिंग को "ए" से प्रतिस्थापित किया जाता है, जिसके परिणामस्वरूप अंतिम आउटपुट "एए" होता है।

इस दोहरे प्रतिस्थापन समस्या को रोकने के लिए, .* जैसे विकल्पों पर विचार करें। , जिसका मिलान करने के लिए कम से कम एक वर्ण की आवश्यकता होती है। वैकल्पिक रूप से, रिप्लेसफर्स्ट() का उपयोग केवल पहली घटना को प्रतिस्थापित करेगा, उस स्थिति से बचा जाएगा जहां एक खाली स्ट्रिंग का दूसरी बार मिलान किया जाता है।

दिलचस्प बात यह है कि, कुछ रेगेक्स इंजन इस दोहरे प्रतिस्थापन व्यवहार को प्रदर्शित नहीं करते हैं। उदाहरण के लिए, जीएनयू सेड पहले मैच के बाद इनपुट को समाप्त मान लेगा, जिससे आगे प्रतिस्थापन को रोका जा सकेगा। हालाँकि, जावा में String.replaceAll() विधि के साथ ".*" का उपयोग करते समय इस संभावित विसंगति के बारे में जागरूक होना महत्वपूर्ण है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3