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

জাভা রেগুলার এক্সপ্রেশন: সকল ম্যাচের তালিকা পাওয়া (List of All Matches)


সমস্যা

জাভার Matcher ক্লাসে সকল ম্যাচের তালিকা রিটার্ন করার কোনো বিল্ট-ইন মেথড নেই। আমাদের ম্যানুয়ালি লুপ চালিয়ে `ArrayList`-এ কালেক্ট করতে হয়।

কোড উদাহরণ: সকল ডিজিট সিকোয়েন্স সংগ্রহ

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ListOfMatchesExample {
    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);
        
        ArrayList<String> list = new ArrayList<>();
        Matcher matcher = pattern.matcher(input);
        
        // লুপ চালিয়ে সকল ম্যাচ লিস্টে যোগ করুন
        while (matcher.find()) {
            list.add(matcher.group());
        }
        
        // ইটেরেটর দিয়ে প্রিন্ট
        Iterator<String> it = list.iterator();
        System.out.println("ম্যাচের তালিকা:");
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

আউটপুট উদাহরণ

ইনপুট টেক্সট লিখুন: sample 1432 text 53 with 363 numbers
ম্যাচের তালিকা:
1432
53
363

মডার্ন জাভা (Java 9+) এ আরও সহজ পদ্ধতি

Java 9 থেকে Matcher.results() মেথড ব্যবহার করে স্ট্রিম হিসেবে সকল ম্যাচ পাওয়া যায়:

// Java 9+
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(input);

List<String> matches = matcher.results()
    .map(MatchResult::group)
    .collect(Collectors.toList());

System.out.println("ম্যাচের তালিকা: " + matches);
// আউটপুট: [1432, 53, 363]

Java 8 এ স্ট্রিম ব্যবহার (results() ছাড়া)

// Java 8 - iterator() ব্যবহার করে
Iterator<String> iterator = matcher.results().map(MatchResult::group).iterator();
// নোট: matcher.results() Java 9+ এই আছে। Java 8-এ ম্যানুয়াল লুপই শুধু পথ।

ArrayList বনাম Array

বিষয়ArrayListArray (String[])
সাইজডাইনামিকফিক্সড (আগে জানতে হয়)
অ্যাড করাসহজ (list.add())কঠিন (রিসাইজ লাগে)
মেমরিকিছুটা বেশিকম
প্রদর্শনসাধারণট্রেডিশনাল

সারসংক্ষেপ

জাভায় সকল রেজেক্স ম্যাচ কালেক্ট করার জন্য while(matcher.find()) list.add(matcher.group()) প্যাটার্নটি স্ট্যান্ডার্ড। Java 9+ এ `matcher.results().map(MatchResult::group).collect(toList())` ব্যবহার করুন আরও ক্লিন কোডের জন্য।

  1. জাভা রেগুলার এক্সপ্রেশনে লোভী পরিমাপক (Greedy Quantifiers)

  2. জাভা রেগুলার এক্সপ্রেশনে PatternSyntaxException ক্লাস

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

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