Skill

Matcher ক্লাসের মেথডসমূহ

জাভা রেজেক্স (Java Regex) - Java Technologies

311

Java Matcher ক্লাস java.util.regex প্যাকেজের একটি অংশ, যা Pattern ক্লাসের মাধ্যমে তৈরি regex প্যাটার্নের সাথে স্ট্রিং ম্যাচ করার জন্য ব্যবহৃত হয়। Matcher ক্লাস বিভিন্ন মেথড প্রদান করে যা regex প্যাটার্নের সাথে স্ট্রিং মিলানো এবং অন্যান্য টেক্সট ম্যানিপুলেশন কাজগুলো করতে সাহায্য করে।

নিচে Matcher ক্লাসের কিছু গুরুত্বপূর্ণ মেথড আলোচনা করা হলো:


1. find()

  • ব্যবহার: find() মেথডটি স্ট্রিংয়ের মধ্যে regex প্যাটার্নের প্রথম মেলানো অংশ খুঁজে বের করে।
  • এটি boolean রিটার্ন করে, যেখানে:
    • true যদি প্যাটার্নের সাথে মেলানো অংশ পাওয়া যায়।
    • false যদি কোনো মেলানো অংশ না পাওয়া যায়।
Matcher m = pattern.matcher("abc123");
if (m.find()) {
    System.out.println("Match found!");
}

2. matches()

  • ব্যবহার: matches() মেথডটি সম্পূর্ণ স্ট্রিংটি regex প্যাটার্নের সাথে মিলেছে কিনা তা যাচাই করে।
  • এটি boolean রিটার্ন করে:
    • true যদি পুরো স্ট্রিং প্যাটার্নের সাথে মিলে।
    • false যদি স্ট্রিং পুরোপুরি প্যাটার্নের সাথে না মিলে।
Matcher m = pattern.matcher("abc123");
if (m.matches()) {
    System.out.println("Complete match!");
} else {
    System.out.println("No complete match.");
}

3. group()

  • ব্যবহার: group() মেথডটি সর্বশেষ মেলানো অংশের মান রিটার্ন করে। এটি find() বা matches() এর পর কল করতে হবে।
  • এটি সেই অংশের স্ট্রিং রিটার্ন করে যা regex প্যাটার্নের সাথে মেলে।
Matcher m = pattern.matcher("abc123");
if (m.find()) {
    System.out.println("Matched group: " + m.group());
}

4. start() & end()

  • ব্যবহার:
    • start() মেথডটি মেলানো অংশের শুরুর ইনডেক্স রিটার্ন করে।
    • end() মেথডটি মেলানো অংশের শেষ ইনডেক্স রিটার্ন করে।
Matcher m = pattern.matcher("abc123");
if (m.find()) {
    System.out.println("Start index: " + m.start());
    System.out.println("End index: " + m.end());
}

5. group(int group)

  • ব্যবহার: এটি একটি নির্দিষ্ট গ্রুপের মেলানো অংশ রিটার্ন করে, যেখানে group() মেথডটি সাধারণত পুরো স্ট্রিং বা প্রথম গ্রুপের মান রিটার্ন করে।
  • group(int group) পদ্ধতি ব্যবহার করে আপনি একটি নির্দিষ্ট গ্রুপের (যদি প্যারেন্টেসিস দিয়ে একটি সাব-প্যাটার্ন ব্যবহার করা হয়) মান রিটার্ন করতে পারেন।
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher("abc123");
if (m.find()) {
    System.out.println("First group: " + m.group(1));  // Group 1 will be '123'
}

6. reset()

  • ব্যবহার: reset() মেথডটি Matcher অবজেক্টকে পুনরায় প্রাথমিক অবস্থায় নিয়ে আসে এবং এটি নতুন ইনপুট স্ট্রিং বা প্যাটার্ন দিয়ে কাজ শুরু করতে পারে।
  • এটি স্ট্রিং পরিবর্তন করার জন্য ব্যবহৃত হয়, যখন আপনি একটি নতুন স্ট্রিং বা প্যাটার্নে কাজ করতে চান।
Matcher m = pattern.matcher("abc123");
if (m.find()) {
    System.out.println("First match: " + m.group());
}
m.reset("def456");
if (m.find()) {
    System.out.println("Second match: " + m.group());
}

7. replaceAll(String replacement)

  • ব্যবহার: replaceAll() মেথডটি regex প্যাটার্নের সকল মেলানো অংশকে নির্দিষ্ট replacement string দিয়ে প্রতিস্থাপন করে।
  • এটি স্ট্রিংয়ের সমস্ত মেলানো অংশের পরিবর্তন করে।
Matcher m = pattern.matcher("abc123 abc456");
String result = m.replaceAll("XYZ");
System.out.println(result);  // Output: XYZ XYZ

8. replaceFirst(String replacement)

  • ব্যবহার: replaceFirst() মেথডটি প্রথম মেলানো অংশটিকে replacement string দিয়ে প্রতিস্থাপন করে।
  • এটি শুধুমাত্র প্রথম মেলানো অংশ পরিবর্তন করে।
Matcher m = pattern.matcher("abc123 abc456");
String result = m.replaceFirst("XYZ");
System.out.println(result);  // Output: XYZ abc456

9. appendReplacement(StringBuffer sb, String replacement)

  • ব্যবহার: appendReplacement() মেথডটি মেলানো অংশগুলির মধ্যে একটি নির্দিষ্ট replacement string যোগ করে, এবং একটি StringBuffer তৈরি করে যা স্ট্রিংয়ের পরিবর্তিত অংশ ধারণ করবে।
Matcher m = pattern.matcher("abc123 abc456");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "XYZ");
}
m.appendTail(sb);  // Adds the remainder of the string
System.out.println(sb.toString());  // Output: XYZ XYZ

10. lookingAt()

  • ব্যবহার: lookingAt() মেথডটি regex প্যাটার্নের সাথে স্ট্রিংয়ের শুরু থেকে মেলানো অংশ খুঁজে বের করে। এটি পুরো স্ট্রিংয়ের জন্য নয়, বরং স্ট্রিংয়ের শুরুতেই মিল খুঁজে।
Matcher m = pattern.matcher("abc123");
if (m.lookingAt()) {
    System.out.println("Match at the beginning of the string!");
} else {
    System.out.println("No match at the beginning.");
}

Summary of Important Matcher Methods:

MethodDescription
find()Checks if the regex matches any part of the string.
matches()Checks if the entire string matches the regex pattern.
group()Returns the matched substring.
group(int group)Returns a specific capturing group.
start() / end()Returns the start or end index of the matched substring.
reset()Resets the matcher to work on a new input string or pattern.
replaceAll(String replacement)Replaces all occurrences of the regex pattern with the given replacement.
replaceFirst(String replacement)Replaces only the first occurrence of the regex pattern with the replacement.
appendReplacement()Appends the replacement string to a StringBuffer while keeping track of the match.
lookingAt()Checks if the regex matches at the beginning of the string.

Matcher ক্লাস Java Regex এর একটি গুরুত্বপূর্ণ অংশ যা regex প্যাটার্ন এবং স্ট্রিংয়ের মধ্যে মেলানো অংশ খুঁজে বের করতে, তাদের পরিবর্তন করতে এবং টেক্সট প্রসেসিং করতে সাহায্য করে। এর মাধ্যমে আপনি সহজেই স্ট্রিং থেকে তথ্য এক্সট্রাক্ট, স্ট্রিং মান যাচাই, বা স্ট্রিং পরিবর্তন করতে পারেন। find(), matches(), group() এবং replaceAll() এর মতো মেথডগুলি regex ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ এবং কার্যকর।

Content added By

java.util.regex.Matcher ক্লাসটি Java Regular Expressions (Regex) এর গুরুত্বপূর্ণ অংশ এবং এটি regex প্যাটার্নের সাথে স্ট্রিং এর মিল খোঁজার এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Matcher ক্লাসের মধ্যে কিছু গুরুত্বপূর্ণ মেথড রয়েছে যা স্ট্রিং-এ প্যাটার্ন ম্যাচিং এবং গ্রুপিং অপারেশনগুলি সহজ করে তোলে। এর মধ্যে অন্যতম মেথডগুলো হল matches(), find(), এবং group()

চলুন, এই মেথডগুলির ব্যবহার এবং তাদের কার্যকারিতা বিস্তারিতভাবে দেখার চেষ্টা করি।


1. Matcher.matches()

  • অর্থ: matches() মেথডটি স্ট্রিংটির পুরো অংশের সাথে regex প্যাটার্নটি ম্যাচ করে কিনা তা পরীক্ষা করে। অর্থাৎ, এটি স্ট্রিংয়ের শুরু থেকে শেষ পর্যন্ত প্যাটার্নটি পরীক্ষা করবে।
  • ফলাফল: যদি স্ট্রিংটি প্যাটার্নের সাথে পুরোপুরি মেলে, তাহলে এটি true ফেরত দেয়; অন্যথায়, false ফেরত দেয়।

ব্যবহার:

  • এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি নিশ্চিত হতে চান যে স্ট্রিংটি পুরোপুরি একটি নির্দিষ্ট প্যাটার্ন অনুসরণ করছে কি না।

উদাহরণ:

import java.util.regex.*;

public class MatcherMatchesExample {
    public static void main(String[] args) {
        // Regex pattern
        String pattern = "hello";

        // String to match
        String text = "hello";

        // Compile the pattern
        Pattern p = Pattern.compile(pattern);

        // Create a matcher
        Matcher m = p.matcher(text);

        // Check if the entire string matches the pattern
        if (m.matches()) {
            System.out.println("Pattern matched!");
        } else {
            System.out.println("Pattern not matched.");
        }
    }
}

আউটপুট:

Pattern matched!

ব্যাখ্যা:

  • এখানে matches() মেথডটি পরীক্ষা করেছে যে স্ট্রিং "hello" পুরোপুরি "hello" প্যাটার্নের সাথে মেলে কি না, এবং এটি true ফেরত দেয়।

2. Matcher.find()

  • অর্থ: find() মেথডটি স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্নটি খুঁজে বের করে। এটি পুরো স্ট্রিংটিকে একে একে পরীক্ষা করে এবং যদি কোথাও প্যাটার্নটি মেলে, তবে এটি true ফেরত দেয়।
  • ফলাফল: find() শুধুমাত্র স্ট্রিংয়ের কোনো একটি অংশে প্যাটার্নটি খুঁজে পাওয়া গেলেই true ফেরত দেয়, পুরো স্ট্রিং পরীক্ষা করার প্রয়োজন নেই।

ব্যবহার:

  • এটি ব্যবহার করা হয় যখন আপনি চান একটি স্ট্রিংয়ের মধ্যে প্যাটার্নের কোনো একটি অংশ খুঁজে বের করতে।

উদাহরণ:

import java.util.regex.*;

public class MatcherFindExample {
    public static void main(String[] args) {
        // Regex pattern
        String pattern = "world";

        // String to search
        String text = "hello world, welcome to Java";

        // Compile the pattern
        Pattern p = Pattern.compile(pattern);

        // Create a matcher
        Matcher m = p.matcher(text);

        // Find the first occurrence of the pattern
        if (m.find()) {
            System.out.println("Pattern found: " + m.group());
        } else {
            System.out.println("Pattern not found.");
        }
    }
}

আউটপুট:

Pattern found: world

ব্যাখ্যা:

  • find() মেথডটি "world" প্যাটার্নটি "hello world, welcome to Java" স্ট্রিংয়ের মধ্যে খুঁজে পেয়েছে এবং true ফেরত দেয়। এর পরে group() মেথডটি সঠিক অংশটি বের করে দেখায়।

3. Matcher.group()

  • অর্থ: group() মেথডটি যখন কোনো মেথড (যেমন find()) প্যাটার্ন ম্যাচ করার পর কল করা হয়, তখন এটি সেই অংশটি (match) ফেরত দেয় যেটি প্যাটার্নের সাথে মিলে গেছে। আপনি এটি ব্যবহার করে capturing groups (প্যাটার্নের মধ্যে প্যারেন্টেসিসের ভিতরে) থেকে মেলে এমন অংশও বের করতে পারেন।
  • ফলাফল: যদি find() বা matches() সফলভাবে কোনো মিল খুঁজে পায়, তবে group() মেথডটি সেই মিল পাওয়া অংশটি ফেরত দেয়।

ব্যবহার:

  • এটি ব্যবহার করা হয় যখন আপনি প্যাটার্নের কোনো নির্দিষ্ট অংশ বা গ্রুপ খুঁজে পেতে চান।

উদাহরণ:

import java.util.regex.*;

public class MatcherGroupExample {
    public static void main(String[] args) {
        // Regex pattern with a capturing group
        String pattern = "(\\w+)\\s+(\\w+)"; // Match two words separated by space

        // String to search
        String text = "hello world";

        // Compile the pattern
        Pattern p = Pattern.compile(pattern);

        // Create a matcher
        Matcher m = p.matcher(text);

        // Check if the pattern is found
        if (m.find()) {
            // Retrieve the matched groups
            System.out.println("Group 1: " + m.group(1)); // First word
            System.out.println("Group 2: " + m.group(2)); // Second word
        } else {
            System.out.println("Pattern not found.");
        }
    }
}

আউটপুট:

Group 1: hello
Group 2: world

ব্যাখ্যা:

  • এখানে প্যাটার্ন (\\w+)\\s+(\\w+) দুটি শব্দ খুঁজে পায়, যেখানে প্রথম গ্রুপটি hello এবং দ্বিতীয় গ্রুপটি world
  • group(1) এবং group(2) ব্যবহার করে দুটি গ্রুপের মান আলাদাভাবে বের করা হয়েছে।

সারাংশ:

  • Matcher.matches(): পুরো স্ট্রিংয়ের সাথে প্যাটার্নটি ম্যাচ করে কিনা তা পরীক্ষা করে।
  • Matcher.find(): স্ট্রিংয়ের কোনো অংশের সাথে প্যাটার্নটি মিলছে কি না তা পরীক্ষা করে।
  • Matcher.group(): প্যাটার্নের সঠিক অংশ বা গ্রুপ বের করে, যা find() বা matches() দ্বারা ম্যাচ করা হয়েছে।

এই তিনটি মেথডের সাহায্যে আপনি Java তে Regular Expressions ব্যবহার করে স্ট্রিং ম্যানিপুলেশন, টেক্সট ভ্যালিডেশন এবং প্যাটার্ন মেলানো সহজে করতে পারবেন।

Content added By

Java-তে Matcher.start() এবং Matcher.end() মেথড দুটি খুবই গুরুত্বপূর্ণ টুল যা java.util.regex.Matcher ক্লাসের মাধ্যমে ব্যবহার করা হয়। এগুলোর মাধ্যমে আপনি মেচিং অংশের অবস্থান বা matching location রানটাইমে খুঁজে পেতে পারেন।

Matcher.start() এবং Matcher.end():

  1. start():
    • এই মেথডটি ম্যাচ করা অংশের শুরুর ইনডেক্স রিটার্ন করে। অর্থাৎ, যেখানে প্রথম মেলা শুরু হয়েছে সেই পজিশনের ইনডেক্স।
    • উদাহরণস্বরূপ, যদি মেলে পাওয়া যায় প্রথম অবস্থানে, তবে start() সেই পজিশনটি ফেরত দেবে।
  2. end():
    • এই মেথডটি ম্যাচ করা অংশের শেষের ইনডেক্স রিটার্ন করে। এটি যে পজিশনে মেলানো শেষ হয়েছে তার ইনডেক্স প্রদান করে।
    • end() মেথডটি শুরুর পরবর্তী ইনডেক্স রিটার্ন করে, অর্থাৎ এটি মেলানো অংশের শেষের পরবর্তী চরিত্রের ইনডেক্স ফেরত দেয়।

উদাহরণ: Matcher.start() এবং Matcher.end() ব্যবহার

ধরা যাক, আমাদের একটি স্ট্রিং আছে এবং আমরা একটি প্যাটার্ন দিয়ে মেলানোর চেষ্টা করছি। start() এবং end() ব্যবহার করে আমরা মেচিং অংশের পজিশন বের করতে পারব।

import java.util.regex.*;

public class MatcherStartEndExample {
    public static void main(String[] args) {
        // Regular expression
        String regex = "(\\b\\w+\\b)";  // Match any word
        
        // Input string
        String input = "Hello, welcome to Java programming.";

        // Compile the regex pattern
        Pattern pattern = Pattern.compile(regex);
        
        // Create matcher object
        Matcher matcher = pattern.matcher(input);

        // Find matches and print their start and end positions
        while (matcher.find()) {
            int start = matcher.start();  // Get the start position of the match
            int end = matcher.end();      // Get the end position of the match
            System.out.println("Matched: " + matcher.group() + " at position: " + start + " to " + (end - 1));
        }
    }
}

কোড বিশ্লেষণ:

  1. (\\b\\w+\\b): এটি একটি রেগুলার এক্সপ্রেশন যা একটি শব্দের (word) সাথে ম্যাচ করে। এখানে \\b শব্দের সীমানা (boundary) নির্দেশ করে এবং \\w+ এক বা একাধিক অক্ষর (letters) বোঝায়।
  2. matcher.find(): এটি ইনপুট স্ট্রিংয়ের মধ্যে মাচিং প্যাটার্ন খুঁজে বের করে।
  3. matcher.start() এবং matcher.end(): এই দুটি মেথড ব্যবহার করে, আমরা প্রতিটি ম্যাচের শুরুর এবং শেষ পজিশন জানতে পারি। start() মেথড শুরুর ইনডেক্স এবং end() মেথড শেষের পরবর্তী ইনডেক্স প্রদান করে।

আউটপুট:

Matched: Hello at position: 0 to 4
Matched: welcome at position: 7 to 13
Matched: to at position: 15 to 16
Matched: Java at position: 18 to 21
Matched: programming at position: 23 to 33

ব্যাখ্যা:

  • প্রথম মেলানো অংশ "Hello" শুরু হয়েছে ইনডেক্স 0-এ এবং শেষ হয়েছে ইনডেক্স 4 পর্যন্ত। (এখানে, end() মেথড 5 রিটার্ন করেছে, যা হল পরবর্তী চরিত্রের ইনডেক্স। তাই বাস্তবে "Hello" এর শেষ চরিত্রের ইনডেক্স হবে 4।)
  • দ্বিতীয় মেলানো অংশ "welcome" শুরু হয়েছে ইনডেক্স 7-এ এবং শেষ হয়েছে ইনডেক্স 13 পর্যন্ত।
  • এভাবেই প্রতিটি মাচিং অংশের পজিশন বের করা হয়েছে।

Matcher.start() এবং Matcher.end() এর আরও ব্যবহার:

  1. Multiple Matches:
    • আপনি একাধিক ম্যাচের জন্য find() মেথড ব্যবহার করতে পারেন এবং প্রতিটি ম্যাচের শুরুর এবং শেষ পজিশন নির্ধারণ করতে পারেন।
  2. Finding Specific Groups:

    • আপনি গ্রুপ ব্যবহার করে প্যাটার্নের নির্দিষ্ট অংশের জন্য শুরুর এবং শেষ পজিশন খুঁজে বের করতে পারেন।

    উদাহরণ:

    String regex = "(\\d+)";
    String input = "There are 123 apples and 456 oranges.";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    
    while (matcher.find()) {
        System.out.println("Matched number: " + matcher.group(1) + " at position: " + matcher.start(1) + " to " + (matcher.end(1) - 1));
    }
    

    আউটপুট:

    Matched number: 123 at position: 10 to 12
    Matched number: 456 at position: 27 to 29
    

সারাংশ:

  • Matcher.start() এবং Matcher.end() মেথডগুলি আপনি যখন রেগুলার এক্সপ্রেশন দিয়ে মাচিং অংশ খুঁজছেন, তখন সেই অংশের অবস্থান বা পজিশন বের করার জন্য ব্যবহার করতে পারেন।
  • start() মেথডটি প্যাটার্নের প্রথম মেলার শুরুর ইনডেক্স দেয়, আর end() মেথডটি শেষের পরবর্তী ইনডেক্স দেয়।
  • এগুলো ব্যবহার করে আপনি টেক্সট প্রসেসিং, স্ট্রিং ম্যানিপুলেশন এবং ডেটা ভ্যালিডেশন কাজে বিশেষভাবে সুবিধা পাবেন।
Content added By

java.util.regex প্যাকেজের Matcher ক্লাসটি স্ট্রিংয়ের মধ্যে রেগুলার এক্সপ্রেশন প্যাটার্নের সাথে মেচিং করতে ব্যবহৃত হয়। এর দুটি গুরুত্বপূর্ণ মেথড replaceAll() এবং replaceFirst() স্ট্রিংয়ের মধ্যে মাচ করা অংশগুলিকে রিপ্লেস করতে ব্যবহৃত হয়।

  1. replaceAll(): এই মেথডটি স্ট্রিংয়ের মধ্যে সব মাচিং অংশকে নতুন মান দিয়ে রিপ্লেস করে।
  2. replaceFirst(): এই মেথডটি প্রথম মাচিং অংশকে রিপ্লেস করে এবং পরবর্তীতে আর কোনো মাচিং অংশকে রিপ্লেস করে না।

1. Matcher.replaceAll()

replaceAll() মেথডটি স্ট্রিংয়ের সব মাচিং অংশকে একটি নতুন স্ট্রিং দিয়ে রিপ্লেস করে। এটি স্ট্রিংয়ের সব মাচিং প্যাটার্ন খুঁজে বের করে এবং প্রতিটি মাচিং প্যাটার্নকে রিপ্লেস করার জন্য ব্যবহৃত একটি নতুন স্ট্রিং ব্যবহার করে।

Syntax:

String replaceAll(String replacement)
  • replacement: এটি নতুন স্ট্রিং যা প্যাটার্ন মাচ করা অংশের পরিবর্তে ব্যবহার করা হবে।

উদাহরণ:

import java.util.regex.*;

public class ReplaceAllExample {
    public static void main(String[] args) {
        String input = "apple banana apple cherry apple";
        String regex = "apple";

        // Create a pattern and matcher
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        // Replace all occurrences of "apple" with "orange"
        String result = matcher.replaceAll("orange");

        // Print the result
        System.out.println("Result: " + result);
    }
}

আউটপুট:

Result: orange banana orange cherry orange

কোড বিশ্লেষণ:

  • এখানে "apple" শব্দটি replaceAll() মেথড দ্বারা "orange" দিয়ে প্রতিস্থাপন করা হয়েছে।
  • স্ট্রিংয়ের সব "apple" অংশ "orange" দিয়ে পরিবর্তিত হয়ে নতুন স্ট্রিং "orange banana orange cherry orange" তৈরি হয়েছে।

2. Matcher.replaceFirst()

replaceFirst() মেথডটি শুধুমাত্র প্রথম মাচিং অংশটিকে রিপ্লেস করে। এটি স্ট্রিংয়ের মধ্যে প্রথম মাচিং প্যাটার্ন খুঁজে বের করে এবং সেই মাচিং অংশকে রিপ্লেস করার জন্য নতুন স্ট্রিং ব্যবহার করে, কিন্তু পরবর্তী মাচিং অংশগুলো অপরিবর্তিত থাকে।

Syntax:

String replaceFirst(String replacement)
  • replacement: এটি নতুন স্ট্রিং যা প্রথম মাচিং প্যাটার্নের পরিবর্তে ব্যবহার করা হবে।

উদাহরণ:

import java.util.regex.*;

public class ReplaceFirstExample {
    public static void main(String[] args) {
        String input = "apple banana apple cherry apple";
        String regex = "apple";

        // Create a pattern and matcher
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        // Replace the first occurrence of "apple" with "orange"
        String result = matcher.replaceFirst("orange");

        // Print the result
        System.out.println("Result: " + result);
    }
}

আউটপুট:

Result: orange banana apple cherry apple

কোড বিশ্লেষণ:

  • এখানে "apple" শব্দটির প্রথম উপস্থিতি "orange" দিয়ে প্রতিস্থাপন করা হয়েছে।
  • শুধুমাত্র "apple" এর প্রথম মাচিং অংশ "orange" দিয়ে পরিবর্তিত হয়েছে, এবং পরবর্তী "apple" অংশ অপরিবর্তিত রয়েছে।

replaceAll() এবং replaceFirst() এর মূল পার্থক্য:

  1. replaceAll():
    • এটি স্ট্রিংয়ের সব মাচিং অংশকে রিপ্লেস করে।
    • এটি পূর্ণ স্ট্রিং স্ক্যান করে এবং সব মাচিং অংশগুলিকে রিপ্লেস করে।
  2. replaceFirst():
    • এটি শুধুমাত্র প্রথম মাচিং অংশকে রিপ্লেস করে।
    • এটি প্রথম মাচিং অংশ পাওয়া মাত্র সেটি রিপ্লেস করে, এরপর আর কোনো মাচিং অংশে পরিবর্তন আনে না।

Additional Example: Dynamic Replacement Using Groups

replaceAll() এবং replaceFirst() এর সাথে আপনি regex groups ব্যবহার করতে পারেন। গ্রুপ ব্যবহার করে আপনি মাচিং প্যাটার্নের বিভিন্ন অংশকে বের করে এবং তা রিপ্লেস করতে পারেন।

Example with Group Replacement:

import java.util.regex.*;

public class GroupReplacementExample {
    public static void main(String[] args) {
        String input = "John: 123, Jane: 456, Jack: 789";
        String regex = "(\\w+): (\\d+)";  // Matching name and number

        // Create a pattern and matcher
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        // Replace with name and number reversed
        String result = matcher.replaceAll("$2 - $1");

        // Print the result
        System.out.println("Result: " + result);
    }
}

আউটপুট:

Result: 123 - John, 456 - Jane, 789 - Jack

কোড বিশ্লেষণ:

  • এখানে, "(\\w+): (\\d+)" রেগুলার এক্সপ্রেশন দুটি গ্রুপ ধরছে: নাম (\w+) এবং নম্বর (\d+)।
  • replaceAll("$2 - $1") ব্যবহার করে, প্রথম গ্রুপ (নাম) এবং দ্বিতীয় গ্রুপ (নম্বর) উল্টে দেওয়া হয়েছে, যার ফলে 123 - John পাওয়া গেছে।

Summary:

  • replaceAll() মেথড স্ট্রিংয়ের মধ্যে সব মাচিং অংশগুলিকে নতুন স্ট্রিং দিয়ে রিপ্লেস করে।
  • replaceFirst() মেথড শুধুমাত্র প্রথম মাচিং অংশটিকে রিপ্লেস করে।
  • আপনি regex groups ব্যবহার করে মাচিং প্যাটার্নের অংশগুলোকেও রিপ্লেস করতে পারেন, যা আরও শক্তিশালী স্ট্রিং ম্যানিপুলেশন করতে সাহায্য করে।

এগুলো Java Regex এর অন্যতম গুরুত্বপূর্ণ ফিচার, যা স্ট্রিংয়ের মধ্যে ডাইনামিক এবং কার্যকরীভাবে প্যাটার্ন রিপ্লেসমেন্ট করতে সাহায্য করে।

Content added By

Java-তে Matcher ক্লাস একটি গুরুত্বপূর্ণ অংশ, যা রেগুলার এক্সপ্রেশন (regex) প্যাটার্নের সাথে স্ট্রিংয়ের মিল বা ম্যাচ চেক করার জন্য ব্যবহৃত হয়। একবার Matcher অবজেক্ট তৈরি করার পর, আপনি স্ট্রিংয়ের সাথে প্যাটার্নের ম্যাচিং পরীক্ষা করতে পারেন। তবে, কখনও কখনও আপনাকে Matcher অবজেক্টের অবস্থান পুনরায় সেট (reset) করতে হতে পারে এবং তারপরে পুনরায় ম্যাচিং (matching) করতে হতে পারে, বিশেষত যখন আপনি একই Pattern ব্যবহার করে একাধিক ইনপুট স্ট্রিংয়ে ম্যাচিং করতে চান।

Matcher Reset করা এবং পুনরায় Matching করা:

1. reset() মেথড:

reset() মেথডটি Matcher অবজেক্টের অবস্থান (state) পুনরায় সেট করে, এবং এটি নতুন স্ট্রিংয়ের সাথে আবার ম্যাচিং শুরু করতে সক্ষম হয়। এটি দুটি ভাবে ব্যবহার করা যেতে পারে:

  • reset(): বর্তমান ইনপুট স্ট্রিংয়ের সাথে পুনরায় ম্যাচিং শুরু করে।
  • reset(CharSequence input): একটি নতুন ইনপুট স্ট্রিং প্রদান করে এবং সেটির সাথে পুনরায় ম্যাচিং শুরু করে।

উদাহরণ: Matcher reset করা এবং পুনরায় matching করা:

import java.util.regex.*;

public class MatcherResetExample {
    public static void main(String[] args) {
        // একটি রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি
        Pattern pattern = Pattern.compile("\\d+");  // যে কোন ডিজিটের এক বা একাধিক

        // প্রথম ইনপুট স্ট্রিং
        Matcher matcher = pattern.matcher("abc 123 def 456 ghi 789");

        // প্রথম স্ট্রিংয়ের মধ্যে ম্যাচিং করা
        while (matcher.find()) {
            System.out.println("Found match: " + matcher.group());
        }

        // Matcher reset করা
        matcher.reset("xyz 987 654 pqr");

        // reset-এর পরে নতুন ইনপুট স্ট্রিংয়ের মধ্যে ম্যাচিং করা
        while (matcher.find()) {
            System.out.println("Found match: " + matcher.group());
        }
    }
}

Output:

Found match: 123
Found match: 456
Found match: 789
Found match: 987
Found match: 654

ব্যাখ্যা:

  1. প্রথমে Pattern.compile("\\d+") দিয়ে একটি প্যাটার্ন তৈরি করা হয়েছে, যা একটি বা একাধিক ডিজিট ম্যাচ করে।
  2. প্রথম ইনপুট "abc 123 def 456 ghi 789" দিয়ে matcher.find() কল করা হয়েছে এবং এটি স্ট্রিংয়ের মধ্যে ডিজিটের সিরিজ গুলি খুঁজে বের করেছে।
  3. তারপর matcher.reset("xyz 987 654 pqr") কল করা হয়েছে, যা পুরনো ইনপুট স্ট্রিংয়ের অবস্থান থেকে Matcher অবজেক্টকে রিসেট করে নতুন ইনপুট স্ট্রিং "xyz 987 654 pqr" দিয়ে পুনরায় ম্যাচিং শুরু করে।
  4. নতুন ইনপুটে পুনরায় ডিজিট গুলি খুঁজে পাওয়া গেছে এবং সেগুলোর সাথে মিল করেছে।

reset() মেথডের আরেকটি ব্যবহার:

reset() মেথডটি একই ইনপুট স্ট্রিংয়ের সাথে পুনরায় ম্যাচিং শুরু করতে ব্যবহৃত হতে পারে, যেমন আপনি যদি একাধিক বার একই ইনপুটের সাথে বিভিন্ন প্যাটার্ন পরীক্ষা করতে চান।

import java.util.regex.*;

public class MatcherResetExample {
    public static void main(String[] args) {
        // একটি রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি
        Pattern pattern = Pattern.compile("\\d+");  // যে কোন ডিজিটের এক বা একাধিক

        // ইনপুট স্ট্রিং
        Matcher matcher = pattern.matcher("abc 123 def 456 ghi 789");

        // প্রথম স্ট্রিংয়ের মধ্যে ম্যাচিং করা
        while (matcher.find()) {
            System.out.println("Found match: " + matcher.group());
        }

        // Matcher reset করা, এবং নতুন প্যাটার্ন ব্যবহার করা
        pattern = Pattern.compile("[a-zA-Z]+");  // যে কোন অক্ষরের এক বা একাধিক
        matcher.reset("abc 123 def 456 ghi 789");

        // এখন নতুন প্যাটার্নের সাথে ম্যাচিং করা
        while (matcher.find()) {
            System.out.println("Found match: " + matcher.group());
        }
    }
}

Output:

Found match: 123
Found match: 456
Found match: 789
Found match: abc
Found match: def
Found match: ghi

ব্যাখ্যা:

  • প্রথমে, ডিজিটের জন্য একটি প্যাটার্ন দিয়ে স্ট্রিংটি ম্যাচ করা হয়।
  • তারপর, reset() মেথড ব্যবহার করে নতুন প্যাটার্ন ([a-zA-Z]+) সেট করা হয়েছে, যা শুধুমাত্র অক্ষরগুলিকে মেলাবে।
  • matcher.reset() এই নতুন প্যাটার্নের সাথে ইনপুট স্ট্রিং পুনরায় ম্যাচিং শুরু করেছে এবং এবার অক্ষরের সিরিজ বের করেছে।

reset() মেথডের কিছু মূল পয়েন্ট:

  1. অবস্থা পুনরায় সেট করা: reset() মেথড Matcher অবজেক্টের অবস্থান (position) এবং স্টেট পুনরায় সেট করে। এটি আপনার জন্য নতুন ইনপুট বা নতুন প্যাটার্ন দিয়ে আবার ম্যাচিং শুরু করতে সুবিধা প্রদান করে।
  2. নতুন ইনপুট: matcher.reset(CharSequence input) ব্যবহার করে আপনি নতুন ইনপুট স্ট্রিং দিয়ে ম্যাচিং শুরু করতে পারেন।
  3. পুনরায় ব্যবহার: একাধিক বার একই Pattern দিয়ে ম্যাচিং করতে Matcher অবজেক্ট পুনরায় ব্যবহার করা সম্ভব হয়।

reset() মেথডটি Matcher অবজেক্টের সাথে কাজ করার সময় খুবই কার্যকর। এটি স্ট্রিং এবং প্যাটার্ন পরিবর্তন করে পুনরায় ম্যাচিং শুরু করতে সহায়তা করে, যা অনেক পরিস্থিতিতে প্রয়োজন হতে পারে। এটি আপনাকে একই Pattern অবজেক্ট ব্যবহার করে একাধিক ইনপুট স্ট্রিংয়ে ম্যাচিং বা একাধিক প্যাটার্নের সাথে একই ইনপুট স্ট্রিং পরীক্ষা করতে সক্ষম করে।

Content added By
Promotion

Are you sure to start over?

Loading...