কম্পিউটার টিউটোরিয়াল

জাভা রেগুলার এক্সপ্রেশন: replaceAll() ও replaceFirst() দিয়ে ম্যাচ করা কন্টেন্ট রিপ্লেস করা


রিপ্লেসমেন্ট মেথডসওয়ারখানি

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` অবজেক্ট ব্যবহার করুন।

  1. জাভা রেগুলার এক্সপ্রেশনে (?: re) সাব-এক্সপ্রেশন ব্যাখ্যা

  2. জাভা রেগুলার এক্সপ্রেশনে (re) সাব-এক্সপ্রেশন ব্যাখ্যা

  3. জাভা রেগুলার এক্সপ্রেশনে \B মেটাক্যারেক্টার ব্যাখ্যা

  4. জাভাতে রেগুলার এক্সপ্রেশন ব্যবহার করে স্ট্রিং থেকে নম্বর বের করা