जवाबों:
पहला एक एकल व्हाट्सएप से मेल खाता है, जबकि दूसरा एक व्हाट्सएप से मेल खाता है। वे तथाकथित नियमित अभिव्यक्ति क्वांटिफायर हैं, और वे इस तरह से मैच करते हैं ( प्रलेखन से लिया गया है ):
Greedy quantifiers
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times
Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times
वे दो replaceAll
कॉल हमेशा उसी परिणाम का उत्पादन करेंगे, चाहे जो x
भी हो। हालांकि, यह ध्यान रखना महत्वपूर्ण है कि दो नियमित अभिव्यक्ति समान नहीं हैं:
\\s
- एकल व्हाट्सएप चरित्र से मेल खाता है \\s+
- एक या अधिक व्हाट्सएप पात्रों के अनुक्रम से मेल खाता है।इस मामले में, इससे कोई फर्क नहीं पड़ता है, क्योंकि आप सब कुछ एक खाली स्ट्रिंग के साथ बदल रहे हैं (हालांकि यह \\s+
दक्षता के दृष्टिकोण से उपयोग करना बेहतर होगा )। यदि आप एक गैर-रिक्त स्ट्रिंग के साथ बदल रहे थे, तो दोनों अलग-अलग व्यवहार करेंगे।
सबसे पहले आपको यह समझने की आवश्यकता है कि दिए गए स्ट्रिंग से सभी रिक्त स्थान को निकालने के लिए दोनों कथनों का अंतिम आउटपुट समान होगा।
हालांकि x.replaceAll("\\s+", "");
ट्रिमिंग रिक्त स्थान का अधिक कुशल तरीका होगा (यदि स्ट्रिंग में कई सन्निहित स्थान हो सकते हैं) क्योंकि संभवतः इस तथ्य के कारण प्रतिस्थापन की कम संख्या होती है कि रेगेक्स \\s+
एक बार में 1 या अधिक रिक्त स्थान से मेल खाता है और उन्हें रिक्त स्ट्रिंग से बदल देता है।
भले ही आप दोनों से एक ही आउटपुट प्राप्त करें, लेकिन इसका उपयोग करना बेहतर है:
x.replaceAll("\\s+", "");
पहला रेगेक्स एक व्हाट्सएप चरित्र से मेल खाएगा। दूसरा रेगेक्स अनिच्छा से एक या अधिक व्हाट्सएप पात्रों से मेल खाएगा। अधिकांश उद्देश्यों के लिए, ये दो रेगीक्स बहुत समान हैं, दूसरे मामले को छोड़कर, रेगेक्स स्ट्रिंग के अधिक मेल खा सकता है, अगर यह रेगेक्स मैच को विफल होने से रोकता है। से http://www.coderanch.com/t/570917/java/java/regex-difference
\s+
, \s+?
अन्य प्रश्न की तरह नहीं ।