मेरे जावा स्रोत कोड:नियमित अभिव्यक्तियों में "*" का प्रभाव क्या है?
String result = "B123".replaceAll("B*","e");
System.out.println(result);
उत्पादन होता है: ee1e2e3e
। क्यों?
मेरे जावा स्रोत कोड:नियमित अभिव्यक्तियों में "*" का प्रभाव क्या है?
String result = "B123".replaceAll("B*","e");
System.out.println(result);
उत्पादन होता है: ee1e2e3e
। क्यों?
'*' का मतलब पिछले चरित्र के शून्य या अधिक मैचों का है। तो प्रत्येक खाली स्ट्रिंग को "ई" के साथ बदल दिया जाएगा।
आप शायद उपयोग करने के लिए '+' के बजाय हैं:
replaceAll("B+", "e")
आपको अपना पैटर्न के लिए इस चाहते हैं:
B+
और अपने कोड होगा:
String result = "B123".replaceAll("B+","e");
System.out.println(result);
"*" मिलान "शून्य या अधिक" - और "शून्य" में बी से पहले कुछ भी नहीं है, साथ ही साथ अन्य सभी पात्रों के बीच भी शामिल है।
Whups, धन्यवाद पॉल! : डी –
पहले प्रयास पर रेगेक्स 'बी' का उपभोग करता है, न कि खाली स्ट्रिंग। फिर यह उस स्थिति से शुरू होता है जहां पहला मैच छोड़ा जाता है, उस स्थिति से रिक्त स्ट्रिंग से मेल खाता है। –
मैंने एक महीने में एक बड़ी तकनीक कंपनी में नियमित रूप से अभिव्यक्तियों में * (splat!) के साथ एक बग फिक्सिंग में काम किया। हमने एक छोटे से ज्ञात यूनिक्स ओएस बनाए रखा। मेरा सिर लगभग विस्फोट हुआ क्योंकि यह एक चरित्र के साथ एक मुठभेड़ की शून्य घटनाओं से मेल खाता है। अपने खुद के पुनर्निर्माण के माध्यम से समझने के लिए एक कठिन बग के बारे में बात करें। हम कुछ मामलों में डबल प्रतिस्थापन कर रहे थे। मुझे पता नहीं लगा कि कोड गलत क्यों था, लेकिन उस कोड को जोड़ने में सक्षम था जिसने विशेष (गलत) केस पकड़ा और डबल सबबिंग को रोक दिया और इसमें शामिल किसी भी यूटिलिटीज को तोड़ दिया नहीं (जिसमें sed और awk शामिल है)। मुझे इस बग को ठीक करने पर गर्व था, लेकिन जैसा कि पहले ही उल्लेख किया गया है।
भगवान के लिए, बस + का उपयोग करें !!!!
हाँ, वह डबल मैच चीज बहुत विचित्र है। इससे पहले कि मैंने इसके लिए देखना सीखा, मुझे कुछ बार फेंक दिया। और यदि आप कर सकते हैं * के बजाय हमेशा + का उपयोग करने के लिए एक +1। –
99% सही ... यह एक लालची खोज है, इसलिए यदि यह "बी" से मेल खा सकता है, तो यह होगा। अन्यथा, आउटपुट "eee1e2e3e" – user54650
होता है जो आउटपुट में ':' को समझाता नहीं है, हालांकि ... – luiscubal
':' शायद एक कॉपी-पेस्ट त्रुटि है, आपूर्ति कोड एक ' : '... –