নিম্নলিখিত দুটি এক্সপ্রেশন মধ্যে পার্থক্য কি?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
উত্তর:
প্রথমটি একটি একক সাদা স্থানের সাথে মেলে, অন্যদিকে এক বা একাধিক শ্বেতস্পেসের সাথে মেলে। তারা তথাকথিত নিয়মিত এক্সপ্রেশন কোয়ান্টিফায়ার এবং তারা এই জাতীয় ম্যাচগুলি সম্পাদন করে ( ডকুমেন্টেশন থেকে নেওয়া ):
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 বা তার বেশি স্পেস একসাথে মিলে যায় এবং খালি স্ট্রিংয়ের সাথে তাদের প্রতিস্থাপন করে replace
সুতরাং আপনি উভয় থেকে একই আউটপুট পান যদিও এটি ব্যবহার করা ভাল:
x.replaceAll("\\s+", "");
প্রথম রেজেক্স একটির সাদা বর্ণের অক্ষরের সাথে মিলবে। দ্বিতীয় রেজেক্স অনিচ্ছাকৃতভাবে এক বা একাধিক সাদা বর্ণের অক্ষরের সাথে মিলবে। বেশিরভাগ উদ্দেশ্যে, এই দুটি রেজেক্সস খুব একই রকম, দ্বিতীয় ক্ষেত্রে বাদে, রেজেক্স আরও স্ট্রিংয়ের সাথে মেলে, যদি এটি রেজেক্স ম্যাচটি ব্যর্থ হতে বাধা দেয়। http://www.coderanch.com/t/570917/java/java/regex-differences থেকে
\s+
নয় \s+?
।