রিপ্লেসমেন্ট মেথডসওয়ারখানি
Matcher ক্লাস দুটি মূল রিপ্লেসমেন্ট মেথড প্রদান করে:
- replaceAll(replacement): ইনপুট স্ট্রিংয়ের সকল ম্যাচ রিপ্লেসমেন্ট স্ট্রিং দিয়ে প্রতিস্থাপন করে।
- replaceFirst(replacement): শুধু প্রথম ম্যাচটি রিপ্লেস করে।
দوینোই নতুন স্ট্রিং রিটার্ন করে (মুল স্ট্রিং পরিবর্তন হয় না)।
উদাহরণ ১: ট্যাব স্পেস রিপ্লেস করে একক স্পেস করা (replaceAll)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAllExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
String input = sc.nextLine();
// এক বা অধিক ট্যাব ম্যাচ
String regex = "\\t+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("ম্যাচ সংখ্যা: " + count);
// সকল ট্যাবকে একক স্পেস দিয়ে রিপ্লেস
String result = matcher.replaceAll(" ");
System.out.println("ফলাফল: " + result);
}
}
আউটপুট উদাহরণ ১
ইনপুট টেক্সট লিখুন: sample text with tab spaces
ম্যাচ সংখ্যা: 4
ফলাফল: sample text with tab spaces
উদাহরণ ২: প্রথম ডিজিটকে # দিয়ে রিপ্লেস (replaceFirst)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceFirstExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
String input = sc.nextLine();
String regex = "\\d"; // প্রথম ডিজিট
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("ম্যাচ সংখ্যা: " + count);
// শুধু প্রথম ম্যাচ রিপ্লেস
String result = matcher.replaceFirst("#");
System.out.println("ফলাফল: " + result);
}
}
আউটপুট উদাহরণ ২
ইনপুট টেক্সট লিখুন: test data 1 2 3
ম্যাচ সংখ্যা: 3
ফলাফল: test data # 2 3
গ্রুপ রেফারেন্স ব্যবহার করে রিপ্লেসমেন্ট
রিপ্লেসমেন্ট স্ট্রিংয়ে `$1`, `$2` ইত্যাদি ব্যবহার করে ক্যাপচার্ড গ্রুপ রেফারেন্স করা যায়।
উদাহরণ: নাম্বার ও ওয়ার্ডের মাঝে স্পেস যোগ
String input = "21This 23is 56sample 99text";
String regex = "(\\d)([A-Za-z])"; // গ্রুপ ১: ডিজিট, গ্রুপ ২: অক্ষর
String result = input.replaceAll(regex, "$1 $2");
// আউটপুট: "21 This 23 is 56 sample 99 text"
String.replaceAll() vs Matcher.replaceAll()
| বিষয় | String.replaceAll() | Matcher.replaceAll() |
|---|---|---|
| সিনট্যাক্স | str.replaceAll(regex, repl) | matcher.replaceAll(repl) |
| প্যাটার্ন রিয়উজ | না (প্রতিবার কম্পাইল) | হ্যাঁ (প্যাটার্ন অবজেক্ট থেকে) |
| গ্রুপ রেফারেন্স | সাপোর্ট করে | সাপোর্ট করে |
| পারফরম্যান্স | वन-টাইম ইউজের জন্য | বারবার ব্যবহারে ভালো |
সারসংক্ষেপ
replaceAll() সকল ম্যাচ রিপ্লেস করে, replaceFirst() শুধু প্রথমটি। গ্রুপ রেফারেন্স (`$1`, `$2`) ব্যবহার করে ডাইনামিক রিপ্লেসমেন্ট করা যায়। পারফরম্যান্সের জন্য রিয়ูজেবল `Pattern` এবং `Matcher` অবজেক্ট ব্যবহার করুন।