সমস্যা
জাভার 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
| বিষয় | ArrayList | Array (String[]) |
|---|---|---|
| সাইজ | ডাইনামিক | ফিক্সড (আগে জানতে হয়) |
| অ্যাড করা | সহজ (list.add()) | কঠিন (রিসাইজ লাগে) |
| মেমরি | কিছুটা বেশি | কম |
| প্রদর্শন | সাধারণ | ট্রেডিশনাল |
সারসংক্ষেপ
জাভায় সকল রেজেক্স ম্যাচ কালেক্ট করার জন্য while(matcher.find()) list.add(matcher.group()) প্যাটার্নটি স্ট্যান্ডার্ড। Java 9+ এ `matcher.results().map(MatchResult::group).collect(toList())` ব্যবহার করুন আরও ক্লিন কোডের জন্য।