Skill

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

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

381

java.util.regex.Pattern ক্লাসটি Java Regular Expressions (Regex) ব্যবহারের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ক্লাস। এটি একটি কম্পাইলড রেগুলার এক্সপ্রেশন প্যাটার্ন (regular expression pattern) প্রতিনিধিত্ব করে এবং বিভিন্ন মেথড প্রদান করে যা রেগুলার এক্সপ্রেশন অপারেশন পরিচালনা করতে ব্যবহৃত হয়। Pattern ক্লাসটি মূলত স্ট্রিংয়ের মধ্যে প্যাটার্ন ম্যাচিং, স্ট্রিং পরিবর্তন, এবং অন্যান্য রেগুলার এক্সপ্রেশন সম্পর্কিত কার্যক্রমের জন্য ব্যবহৃত হয়।

Pattern ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:

  1. compile(String regex):
    • এই মেথডটি একটি রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি করে এবং একটি Pattern অবজেক্ট রিটার্ন করে।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("a*b");
      
  2. compile(String regex, int flags):
    • এই মেথডটি রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি করার সাথে সাথে একটি বা একাধিক flags (যেমন, Pattern.CASE_INSENSITIVE) ব্যবহার করে সেটি কনফিগার করে।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
      
  3. matcher(CharSequence input):
    • এই মেথডটি একটি Matcher অবজেক্ট তৈরি করে, যা নির্দিষ্ট ইনপুট স্ট্রিংয়ের সাথে রেগুলার এক্সপ্রেশন প্যাটার্নটি মিলানোর জন্য ব্যবহৃত হয়।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("a*b");
      Matcher matcher = pattern.matcher("aaab");
      
  4. matches():
    • matches() মেথডটি রেগুলার এক্সপ্রেশন প্যাটার্নের পুরো স্ট্রিংয়ের সাথে মেলানোর জন্য ব্যবহৃত হয়। এটি Matcher অবজেক্টের একটি মেথড, যা true রিটার্ন করে যদি স্ট্রিং পুরোপুরি প্যাটার্নের সাথে মিলে।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("a*b");
      Matcher matcher = pattern.matcher("aaab");
      boolean isMatch = matcher.matches();  // true
      
  5. split(CharSequence input):
    • এই মেথডটি ইনপুট স্ট্রিংটিকে রেগুলার এক্সপ্রেশন প্যাটার্ন অনুসারে বিভক্ত করে একটি অ্যারে রিটার্ন করে।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("\\s+"); // Whitespace as separator
      String[] words = pattern.split("This is a test");
      for (String word : words) {
          System.out.println(word);
      }
      

      আউটপুট:

      This
      is
      a
      test
      
  6. split(CharSequence input, int limit):
    • এই মেথডটি ইনপুট স্ট্রিংটিকে রেগুলার এক্সপ্রেশন প্যাটার্ন অনুসারে বিভক্ত করে, তবে এটি একটি সীমিত সংখ্যক বিভাজন করে।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("\\s+");
      String[] words = pattern.split("This is a test", 3);
      for (String word : words) {
          System.out.println(word);
      }
      

      আউটপুট:

      This
      is
      a test
      
  7. quote(String s):
    • quote() মেথডটি একটি স্ট্রিংকে রেগুলার এক্সপ্রেশন প্যাটার্নের মতো নিরাপদে তৈরি করে। এটি স্ট্রিংয়ে থাকা বিশেষ ক্যারেক্টারগুলিকে যথাযথভাবে escape করে।
    • উদাহরণ:

      String safeRegex = Pattern.quote("a+b*");
      System.out.println(safeRegex);  // Prints \Qa+b*\Q
      
  8. pattern():
    • এই মেথডটি Pattern অবজেক্টের আসল রেগুলার এক্সপ্রেশন প্যাটার্ন ফেরত দেয়।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("a*b");
      System.out.println(pattern.pattern());  // Prints a*b
      
  9. flags():
    • এই মেথডটি Pattern অবজেক্টের flags (যেমন, CASE_INSENSITIVE, DOTALL, ইত্যাদি) ফেরত দেয়।
    • উদাহরণ:

      Pattern pattern = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
      System.out.println(pattern.flags());  // Prints 2 (which corresponds to CASE_INSENSITIVE)
      

Pattern ক্লাসের একটি উদাহরণ:

import java.util.regex.*;

public class PatternExample {
    public static void main(String[] args) {
        // Compile the regular expression
        Pattern pattern = Pattern.compile("a*b");

        // Create a matcher
        Matcher matcher = pattern.matcher("aaab");

        // Checking if the pattern matches
        if (matcher.matches()) {
            System.out.println("Pattern matches!");
        } else {
            System.out.println("Pattern does not match.");
        }

        // Splitting a string based on whitespace
        Pattern whitespacePattern = Pattern.compile("\\s+");
        String[] words = whitespacePattern.split("This is a test");
        for (String word : words) {
            System.out.println(word);
        }

        // Using the quote method to escape special characters
        String specialString = Pattern.quote("a+b*");
        System.out.println("Quoted String: " + specialString);
    }
}

আউটপুট:

Pattern matches!
This
is
a
test
Quoted String: \Qa+b*\Q

Pattern ক্লাসের গুরুত্ব:

  • Regex Pattern Matching: এটি স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করার জন্য ব্যবহৃত হয়। যেমন, ইমেইল অ্যাড্রেস যাচাই করা, ফোন নম্বর যাচাই করা, পাসওয়ার্ডের নিরাপত্তা চেক করা ইত্যাদি।
  • String Manipulation: Pattern ক্লাস এবং Matcher ক্লাসের মাধ্যমে স্ট্রিংগুলোর মধ্যে পরিবর্তন ও ম্যানিপুলেশন করা সহজ হয়, যেমন টেক্সট বিভক্ত করা (split), প্যাটার্নের সাথে ম্যাচ করা, স্ট্রিংয়ে সন্নিবেশ করা ইত্যাদি।

Pattern ক্লাসটি Java Regular Expressions ব্যবহার করার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ক্লাস। এটি আপনাকে প্যাটার্ন তৈরি, ম্যাচিং, এবং স্ট্রিং ম্যানিপুলেশন করার ক্ষমতা দেয়। এটি Matcher ক্লাসের সাথে একত্রে কাজ করে, যার মাধ্যমে আপনি স্ট্রিংয়ের বিভিন্ন অংশ বিশ্লেষণ করতে পারেন এবং সেগুলোর উপর বিভিন্ন অপারেশন প্রয়োগ করতে পারেন।

Content added By

Pattern.compile() মেথডটি java.util.regex.Pattern ক্লাসের একটি স্ট্যাটিক মেথড, যা একটি রেগুলার এক্সপ্রেশন প্যাটার্ন কম্পাইল করে একটি Pattern অবজেক্ট তৈরি করে। এই Pattern অবজেক্টের মাধ্যমে আপনি পরবর্তী সময়ে Matcher ক্লাসের সাহায্যে স্ট্রিং ম্যানিপুলেশন বা প্যাটার্ন ম্যাচিং করতে পারেন।

এখানে Pattern.compile() মেথড এবং তার ব্যবহারের কিছু কৌশল দেওয়া হচ্ছে।


Pattern.compile() মেথডের ব্যবহারের কৌশল:

  1. বেসিক Syntax:

    Pattern pattern = Pattern.compile(String regex);
    

    যেখানে:

    • regex: এটি রেগুলার এক্সপ্রেশন প্যাটার্ন হিসাবে একটি স্ট্রিং।
    • pattern: এটি একটি Pattern অবজেক্ট যা পরবর্তীতে Matcher অবজেক্টের মাধ্যমে ব্যবহার করা যাবে।
  2. Pattern.compile() এর বিভিন্ন ভেরিয়েন্ট:
    • Pattern.compile(String regex): সাধারণ প্যাটার্ন কম্পাইল করার জন্য।
    • Pattern.compile(String regex, int flags): এখানে আপনি রেগুলার এক্সপ্রেশন প্যাটার্নের সাথে একাধিক ফ্ল্যাগ (যেমন CASE_INSENSITIVE, MULTILINE, DOTALL ইত্যাদি) ব্যবহার করতে পারেন।

Pattern.compile() এর ব্যবহার:

1. Basic Example:

import java.util.regex.*;

public class PatternCompileExample {
    public static void main(String[] args) {
        String regex = "apple"; // প্যাটার্ন হিসাবে "apple"
        String text = "I have an apple."; // টেক্সট স্ট্রিং
        
        // Pattern তৈরি করা
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করা
        Matcher matcher = pattern.matcher(text);
        
        // স্ট্রিংয়ের সাথে প্যাটার্ন মেলা পরীক্ষা করা
        boolean isMatch = matcher.find();
        System.out.println("Pattern found: " + isMatch);  // true
    }
}

ব্যাখ্যা:

  • এখানে "apple" প্যাটার্নটি খোঁজা হচ্ছে স্ট্রিং "I have an apple."-এ।
  • matcher.find() মেথডটি খুঁজবে এবং মেলানো হলে true রিটার্ন করবে।

আউটপুট:

Pattern found: true

2. Using Flags with Pattern.compile()

Flags ব্যবহার করে আপনি প্যাটার্নের আচরণ কাস্টমাইজ করতে পারেন। যেমন CASE_INSENSITIVE, DOTALL, MULTILINE ইত্যাদি ফ্ল্যাগস প্যাটার্নের আচরণ পরিবর্তন করতে ব্যবহৃত হয়।

import java.util.regex.*;

public class PatternCompileWithFlagsExample {
    public static void main(String[] args) {
        String regex = "apple"; // প্যাটার্ন হিসাবে "apple"
        String text = "I have an APPLE."; // টেক্সট স্ট্রিং
        
        // Pattern তৈরি করা, CASE_INSENSITIVE ফ্ল্যাগ ব্যবহার করা
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        
        // Matcher তৈরি করা
        Matcher matcher = pattern.matcher(text);
        
        // স্ট্রিংয়ের সাথে প্যাটার্ন মেলা পরীক্ষা করা
        boolean isMatch = matcher.find();
        System.out.println("Pattern found: " + isMatch);  // true
    }
}

ব্যাখ্যা:

  • এখানে Pattern.CASE_INSENSITIVE ফ্ল্যাগ ব্যবহার করা হয়েছে, যার ফলে প্যাটার্ন "apple" এবং "APPLE" এর মধ্যে কোনো পার্থক্য করবে না।
  • আউটপুট হবে true, কারণ প্যাটার্ন "APPLE" স্ট্রিংয়ে রয়েছে এবং ফ্ল্যাগের কারণে এটি মেলা হয়।

আউটপুট:

Pattern found: true

3. Matching Start and End with Anchors (^ and $)

Start (^) এবং End ($) অঙ্কর ব্যবহার করে আপনি স্ট্রিংয়ের শুরু এবং শেষে প্যাটার্ন মেলাতে পারেন।

import java.util.regex.*;

public class PatternAnchorsExample {
    public static void main(String[] args) {
        String regex = "^apple"; // প্যাটার্ন "apple" দিয়ে স্ট্রিং শুরু হবে
        String text = "apple pie"; // টেক্সট স্ট্রিং
        
        // Pattern তৈরি করা
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করা
        Matcher matcher = pattern.matcher(text);
        
        // স্ট্রিংয়ের শুরুতে প্যাটার্ন মেলা পরীক্ষা করা
        boolean isMatch = matcher.find();
        System.out.println("Pattern found at the start: " + isMatch);  // true
    }
}

ব্যাখ্যা:

  • এখানে "^apple" প্যাটার্নটি চেক করবে যে স্ট্রিংটি "apple" দিয়ে শুরু হচ্ছে কিনা।
  • matcher.find() মেথডটি স্ট্রিংয়ের শুরুতে মেলা খুঁজবে এবং মেলালে true রিটার্ন করবে।

আউটপুট:

Pattern found at the start: true

4. Extracting Groups with Parentheses

Grouping একটি রেগুলার এক্সপ্রেশন প্যাটার্নে () ব্যবহার করে আপনি বিভিন্ন অংশকে গ্রুপ করতে পারেন এবং পরে গ্রুপগুলোর মান আলাদা করে বের করতে পারেন।

import java.util.regex.*;

public class PatternGroupingExample {
    public static void main(String[] args) {
        String regex = "(\\d+)-(\\d+)-(\\d+)"; // প্যাটার্ন: YYYY-MM-DD
        String text = "2023-05-15"; // টেক্সট স্ট্রিং
        
        // Pattern তৈরি করা
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করা
        Matcher matcher = pattern.matcher(text);
        
        // গ্রুপ বের করা
        if (matcher.find()) {
            System.out.println("Year: " + matcher.group(1));   // 2023
            System.out.println("Month: " + matcher.group(2));  // 05
            System.out.println("Day: " + matcher.group(3));    // 15
        }
    }
}

ব্যাখ্যা:

  • এখানে, (\\d+)-(\\d+)-(\\d+) প্যাটার্নটি তিনটি গ্রুপ তৈরি করছে (বছর, মাস, দিন)। গ্রুপিং এর মাধ্যমে এই তিনটি অংশ আলাদা করা হয়েছে।
  • matcher.group(1), matcher.group(2), এবং matcher.group(3) দিয়ে প্রতিটি গ্রুপের মান আলাদাভাবে পাওয়া যাচ্ছে।

আউটপুট:

Year: 2023
Month: 05
Day: 15

5. Replacing Text with replaceAll()

replaceAll() মেথডটি স্ট্রিংয়ের সমস্ত মিল খুঁজে বের করে এবং সেই অংশগুলোকে রিপ্লেস করে দেয়।

import java.util.regex.*;

public class PatternReplaceExample {
    public static void main(String[] args) {
        String regex = "apple"; // প্যাটার্ন হিসাবে "apple"
        String text = "apple orange apple banana";
        
        // Pattern তৈরি করা
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করা
        Matcher matcher = pattern.matcher(text);
        
        // সবগুলো "apple" রিপ্লেস করা
        String result = matcher.replaceAll("fruit");
        System.out.println("Updated text: " + result);  // fruit orange fruit banana
    }
}

ব্যাখ্যা:

  • এখানে replaceAll() মেথডটি সব "apple" সাবস্ট্রিংকে "fruit"-এ রিপ্লেস করে।
  • আউটপুট হবে fruit orange fruit banana

Pattern.compile() মেথডটি Java Regular Expressions এর মূল উপাদান, যা একটি রেগুলার এক্সপ্রেশন স্ট্রিংকে Pattern অবজেক্টে রূপান্তরিত করে। এর মাধ্যমে আপনি স্ট্রিংয়ের বিভিন্ন অংশের সাথে matching, finding, replacing এবং grouping করতে পারেন।

  • Pattern.compile() এবং Matcher এর মাধ্যমে স্ট্রিং ম্যানিপুলেশন করা হয়, যেমন find(), matches(), replaceAll(), group() ইত্যাদি মেথডের সাহায্যে।
  • Anchors (যেমন ^ এবং $), Alternation (|), এবং Grouping (()) প্যাটার্নের মধ্যে ব্যবহার করা হয় স্ট্রিংয়ের নির্দিষ্ট অংশ চিহ্নিত করতে এবং Reflection এর মাধ্যমে ডাইনামিকভাবে প্যাটার্ন প্রসেস করা সম্ভব হয়।

Java-তে Regex এবং Reflection একত্রে ব্যবহার করে আরো শক্তিশালী কোড তৈরি করা যায় যা ডাইনামিকভাবে কোডের কার্যকারিতা পরিবর্তন করতে সাহায্য করে।

Content added By

Java Regular Expressions (Regex) ব্যবহারে প্যাটার্ন matching আরও কাস্টমাইজ করতে flags ব্যবহার করা যেতে পারে। Java এর Pattern ক্লাসে কিছু বিশেষ flags রয়েছে, যেগুলি প্যাটার্ন matching-এর আচরণ পরিবর্তন করতে সাহায্য করে, যেমন CASE_INSENSITIVE, DOTALL, এবং MULTILINE। এই flags-গুলো regex প্যাটার্নের matching behavior কাস্টমাইজ করতে ব্যবহৃত হয়।

Flags:

  1. CASE_INSENSITIVE (Pattern.CASE_INSENSITIVE):
    • এই flag ব্যবহার করলে, regex প্যাটার্নটি case-insensitive হয়ে যায়, অর্থাৎ বড় হাতের (uppercase) এবং ছোট হাতের (lowercase) অক্ষরের মধ্যে পার্থক্য করা হয় না।
    • এটি প্যাটার্ন matching-এর সময় case (বড় বা ছোট অক্ষর) উপেক্ষা করে।
  2. DOTALL (Pattern.DOTALL):
    • DOTALL flag ব্যবহার করলে, . (dot) symbol যেকোনো character (যেমন new line) কে মেলাবে। সাধারনত, . শুধুমাত্র সাধারণ characters যেমন alphabets, digits ইত্যাদি মেলে, কিন্তু DOTALL flag দিলে এটি newline character (\n) সহ সব ধরনের ক্যারেক্টার মেলে।
  3. MULTILINE (Pattern.MULTILINE):
    • MULTILINE flag ব্যবহার করলে, ^ এবং $ anchors স্ট্রিংয়ের প্রতিটি নতুন লাইনের শুরু এবং শেষের সাথে মিলে। সাধারনত, ^ এবং $ স্ট্রিংয়ের শুরু এবং শেষের সাথে মেলে, কিন্তু MULTILINE flag ব্যবহার করলে তা lines এর মধ্যে এবং শেষে মেলে।

Java Regex Example Using Flags (CASE_INSENSITIVE, DOTALL, MULTILINE):

এখানে আমরা একটি practical example দেখব যেখানে তিনটি flag ব্যবহার করা হবে—CASE_INSENSITIVE, DOTALL, এবং MULTILINE

Step 1: Using CASE_INSENSITIVE, DOTALL, and MULTILINE Flags with Pattern Matching

import java.util.regex.*;

public class RegexFlagsExample {
    public static void main(String[] args) {
        // Example text for testing
        String text = "Hello World!\nThis is a multiline text.\nThe quick brown fox jumps over the lazy dog.";

        // Case insensitive regex pattern
        String caseInsensitivePattern = "hello";

        // Dotall regex pattern (dot will match newline characters)
        String dotAllPattern = "fox.*dog";

        // Multiline regex pattern
        String multilinePattern = "^The";

        // Compile patterns with respective flags
        Pattern patternCaseInsensitive = Pattern.compile(caseInsensitivePattern, Pattern.CASE_INSENSITIVE);
        Pattern patternDotAll = Pattern.compile(dotAllPattern, Pattern.DOTALL);
        Pattern patternMultiline = Pattern.compile(multilinePattern, Pattern.MULTILINE);

        // Create matchers
        Matcher matcherCaseInsensitive = patternCaseInsensitive.matcher(text);
        Matcher matcherDotAll = patternDotAll.matcher(text);
        Matcher matcherMultiline = patternMultiline.matcher(text);

        // Case insensitive match
        System.out.println("Case Insensitive Match: " + matcherCaseInsensitive.find());

        // Dotall match (will match across newlines)
        System.out.println("Dotall Match (fox.*dog): " + matcherDotAll.find());

        // Multiline match (will match lines starting with "The")
        System.out.println("Multiline Match (^The): " + matcherMultiline.find());
    }
}

ব্যাখ্যা:

  1. Case Insensitive Matching:
    • Pattern.CASE_INSENSITIVE flag ব্যবহার করে আমরা hello প্যাটার্নটি বড় হাতের বা ছোট হাতের hello এর সাথে মেলাতে পারি।
  2. Dotall Matching:
    • Pattern.DOTALL flag ব্যবহার করে আমরা fox.*dog প্যাটার্নটি লাইনবিরতির (newline) মধ্যে মেলে এমন কোনো কিছু খুঁজতে পারি। অর্থাৎ, এটি fox থেকে dog পর্যন্ত যেকোনো কিছু মেলাবে, এমনকি যদি তারা আলাদা লাইনে থাকে।
  3. Multiline Matching:
    • Pattern.MULTILINE flag ব্যবহার করলে, ^The প্যাটার্নটি শুধুমাত্র স্ট্রিংয়ের শুরুতে নয়, বরং প্রতিটি নতুন লাইনের শুরুতে খুঁজবে।

Step 2: Output

Case Insensitive Match: true
Dotall Match (fox.*dog): true
Multiline Match (^The): true

আউটপুট ব্যাখ্যা:

  1. Case Insensitive Match: hello স্ট্রিংটি Hello (বড় হাতের H) এবং hello (ছোট হাতের h) এর সাথে মিলে গেছে, কারণ CASE_INSENSITIVE flag ব্যবহৃত হয়েছে।
  2. Dotall Match: fox.*dog প্যাটার্নটি নতুন লাইনসহ পুরো টেক্সটের মধ্যে মেলেছে, কারণ DOTALL flag ব্যবহৃত হয়েছে।
  3. Multiline Match: ^The প্যাটার্নটি টেক্সটের প্রতিটি নতুন লাইনের শুরুতে মিলেছে, কারণ MULTILINE flag ব্যবহৃত হয়েছে।

Other Possible Flags in Java Regex:

  1. UNICODE_CASE (Pattern.UNICODE_CASE):
    • Unicode ক্যারেক্টার matching করতে ব্যবহৃত হয়, যা আন্তর্জাতিক ক্যারেক্টার সেটের সঙ্গে কাজ করতে সহায়ক।
  2. COMMENTS (Pattern.COMMENTS):
    • এই flag regex প্যাটার্নে মন্তব্য (comments) যোগ করতে সাহায্য করে, যাতে regex এর মধ্যে আরও পরিষ্কার এবং পাঠযোগ্য করা যায়।
  3. LITERAL (Pattern.LITERAL):
    • এটি regex প্যাটার্নকে একটি সাধারণ literal string হিসেবে ব্যবহার করতে সাহায্য করে, যেখানে কোনও metacharacter ব্যবহার করা হয় না।

Java Regex এর flags ব্যবহার করে আপনি প্যাটার্ন matching-এর আচরণ কাস্টমাইজ করতে পারেন। CASE_INSENSITIVE, DOTALL, এবং MULTILINE হল কিছু গুরুত্বপূর্ণ flag যা Java Regex ব্যবহারকারীদের প্যাটার্ন matching এর মধ্যে অনেক flexibility দেয়। এগুলি স্ট্রিং matching এবং টেক্সট ম্যানিপুলেশনকে আরও শক্তিশালী ও কার্যকর করে তোলে, বিশেষত যখন আপনাকে বিভিন্ন ধরনের প্যাটার্ন মেলাতে বা টেক্সট ফর্ম্যাটিং করতে হয়।

Content added By

Pattern.quote() মেথডটি Java Regex (Regular Expressions) এর অংশ, যা java.util.regex.Pattern ক্লাসে পাওয়া যায়। এই মেথডটি Special Characters এর জন্য একটি উপকারী উপায় প্রদান করে, যা রেগুলার এক্সপ্রেশন প্যাটার্নে ব্যবহার করা হয়। যখন আপনি কোনও স্ট্রিং ব্যবহার করতে চান যা রেগুলার এক্সপ্রেশন হিসেবে বিশেষ অর্থ বহন করে, তখন আপনি Pattern.quote() মেথডটি ব্যবহার করে সেই স্ট্রিংটিকে literal (লিটারাল) হিসেবে নির্দিষ্ট করতে পারেন।

Pattern.quote() মেথডের ধারণা:

Pattern.quote(String s) মেথডটি একটি স্ট্রিং গ্রহণ করে এবং সেই স্ট্রিংয়ের সমস্ত স্পেশাল ক্যারেক্টারকে লিটারাল ক্যারেক্টারে পরিণত করে, যাতে তারা রেগুলার এক্সপ্রেশন প্যাটার্নের অংশ হিসেবে ব্যবহৃত না হয়। এটি স্ট্রিংটি একটি সাধারণ রেগুলার এক্সপ্রেশন হিসেবে বিবেচিত হবে, যা কোনও বিশেষ রেগুলার এক্সপ্রেশন প্যাটার্নের অংশ হবে না।

Special Characters in Regex:

রেগুলার এক্সপ্রেশন (Regex)-এ কিছু স্পেশাল ক্যারেক্টার আছে, যেমন *, +, ?, . (ডট), [], {}, ^, $, |, () ইত্যাদি, যেগুলি রেগুলার এক্সপ্রেশন প্যাটার্নের বিশেষ অর্থ বহন করে। এই ক্যারেক্টারগুলিকে literal characters হিসেবে ব্যবহারের জন্য Pattern.quote() ব্যবহার করা হয়।

Pattern.quote() মেথড উদাহরণ:

ধরা যাক, আমাদের একটি স্ট্রিং আছে যা একটি স্পেশাল ক্যারেক্টার যেমন * ধারণ করে। যদি আমরা সরাসরি এই স্ট্রিংটি রেগুলার এক্সপ্রেশন হিসেবে ব্যবহার করি, তবে * ক্যারেক্টারটি একটি বিশেষ অর্থ দেবে (যেমন শূন্য বা একাধিক পুনরাবৃত্তি)। তাই আমরা চাই, * ক্যারেক্টারটি সাধারণ অক্ষর হিসেবে ব্যবহৃত হোক। এই কাজটি Pattern.quote() মেথডের মাধ্যমে করা সম্ভব।

import java.util.regex.*;

public class PatternQuoteExample {
    public static void main(String[] args) {
        String text = "The price of the car is 30000 dollars.";
        
        // Using Pattern.quote() to escape the special character
        String specialString = "30000 dollars.";
        String regex = Pattern.quote(specialString);  // Quote the string to handle special characters
        
        // Create a pattern to match the quoted string
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        
        // Searching for the quoted string in the text
        if (matcher.find()) {
            System.out.println("Found the quoted string: " + matcher.group());
        }
    }
}

ব্যাখ্যা:

  1. Pattern.quote(specialString): এখানে specialString (যেমন "30000 dollars.") একটি স্ট্রিং যা রেগুলার এক্সপ্রেশন প্যাটার্নে বিশেষ অর্থ বহন করতে পারে (যেমন, ডট . একটি বিশেষ ক্যারেক্টার), তাই Pattern.quote() ব্যবহার করে এই স্ট্রিংটি "লিটারাল" বানানো হয়েছে।
  2. matcher.find(): এই মেথডটি টেক্সটের মধ্যে স্ট্রিংটি খুঁজে বের করবে।

আউটপুট:

Found the quoted string: 30000 dollars.

এখানে, Pattern.quote() ব্যবহার করার মাধ্যমে আমরা 30000 dollars. স্ট্রিংটি একটি literal string হিসেবে ব্যবহার করতে পেরেছি এবং স্পেশাল ক্যারেক্টার . এর প্রভাব থেকে এটি মুক্ত রাখা হয়েছে।

Pattern.quote() এর সুবিধা:

  • Escape Special Characters: রেগুলার এক্সপ্রেশন প্যাটার্নের মধ্যে স্পেশাল ক্যারেক্টার ব্যবহারের ক্ষেত্রে তা লিটারাল ক্যারেক্টার হিসেবে ব্যবহৃত হবে, যাতে সেই ক্যারেক্টারটি রেগুলার এক্সপ্রেশন প্যাটার্নে বিশেষ অর্থ না দেয়।
  • Code Simplicity: Pattern.quote() ব্যবহারের মাধ্যমে আপনি স্পেশাল ক্যারেক্টারগুলিকে "escape" করার জন্য অতিরিক্ত কোড লিখতে হবে না।
  • Maintainability: এটি কোডটিকে আরও সহজ এবং রক্ষণাবেক্ষণযোগ্য করে তোলে, কারণ আপনি স্পেশাল ক্যারেক্টারগুলির জন্য আলাদা করে escape sequence ব্যবহার করার পরিবর্তে এক লাইনে এটি করতে পারেন।

Special Characters এর তালিকা:

  • . (ডট) – যেকোনো একক ক্যারেক্টার (একটি wildcard)
  • * – শূন্য বা একাধিক পুনরাবৃত্তি
  • + – এক বা একাধিক পুনরাবৃত্তি
  • ? – শূন্য বা একবার
  • [] – ক্যারেক্টার ক্লাস (একটি নির্দিষ্ট ক্যারেক্টার বা ক্যারেক্টারের যেকোনো একটি)
  • {} – নির্দিষ্ট পরিসরের পুনরাবৃত্তি
  • ^ – স্ট্রিংয়ের শুরু
  • $ – স্ট্রিংয়ের শেষ
  • | – OR অপারেটর
  • () – গ্রুপিং (অথবা সাব-প্যাটার্ন)

Pattern.quote() একটি কার্যকরী টুল যা রেগুলার এক্সপ্রেশন প্যাটার্নে literal strings ব্যবহার করার সময় বিশেষ ক্যারেক্টারগুলির প্রভাব এড়াতে সহায়তা করে। যখন আপনি একটি স্ট্রিংকে রেগুলার এক্সপ্রেশন প্যাটার্ন হিসেবে ব্যবহার করতে চান, কিন্তু সেটিতে স্পেশাল ক্যারেক্টার থাকে, তখন Pattern.quote() ব্যবহার করা উচিত। এটি বিশেষ ক্যারেক্টারগুলিকে escape করে এবং স্ট্রিংটিকে লিটারাল হিসেবে ব্যবহার করতে সহায়তা করে।

Content added By

Java Reflection Package এর সাথে Pattern.split() পদ্ধতি সরাসরি সম্পর্কিত নয়, কারণ Pattern.split() একটি Regular Expression (Regex) এর অংশ, যা স্ট্রিং স্প্লিট করার জন্য ব্যবহৃত হয়। তবে, এটি java.util.regex প্যাকেজের অন্তর্গত এবং স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট প্যাটার্ন অনুযায়ী বিভাজন (split) করতে সাহায্য করে।

Pattern.split() পদ্ধতির ব্যবহার

Pattern.split() পদ্ধতি একটি স্ট্রিংকে নির্দিষ্ট একটি প্যাটার্নের ভিত্তিতে বিভক্ত (split) করে, এবং এটি একটি অ্যারে বা তালিকা রিটার্ন করে, যা প্রতিটি অংশের মধ্যে বিভক্ত।

Pattern.split() পদ্ধতির সিনট্যাক্স:

public String[] split(CharSequence input)
  • input: এটি সেই স্ট্রিং যার ভিত্তিতে আপনি বিভাজন করতে চান।
  • Return: এটি একটি স্ট্রিং অ্যারে রিটার্ন করে, যেখানে প্রতিটি স্ট্রিং প্যাটার্নের ভিত্তিতে বিভক্ত একটি অংশ।

Pattern.split() পদ্ধতির উদাহরণ:

ধরা যাক, আমাদের একটি স্ট্রিং রয়েছে এবং আমরা একটি নির্দিষ্ট প্যাটার্নের ভিত্তিতে এই স্ট্রিংকে বিভক্ত করতে চাই।

উদাহরণ 1: স্পেস দ্বারা বিভাজন:

যেমন, যদি আপনি একটি স্ট্রিংকে স্পেস অনুযায়ী বিভক্ত করতে চান।

import java.util.regex.*;

public class PatternSplitExample {
    public static void main(String[] args) {
        String text = "Java is a programming language";

        // প্যাটার্ন স্পেস দ্বারা বিভাজন করা হচ্ছে
        Pattern pattern = Pattern.compile("\\s+");  // \s+ matches one or more spaces
        String[] words = pattern.split(text);

        // বিভাজিত অংশগুলো প্রদর্শন করা
        for (String word : words) {
            System.out.println(word);
        }
    }
}

আউটপুট:

Java
is
a
programming
language

ব্যাখ্যা:

  • Pattern.compile("\\s+"): এখানে \\s+ একটি রেগুলার এক্সপ্রেশন যা এক বা একাধিক স্পেসের জন্য প্যাটার্ন মেলে।
  • pattern.split(text): এটি text স্ট্রিংকে স্পেস দ্বারা বিভক্ত করে একটি স্ট্রিং অ্যারে রিটার্ন করে।

উদাহরণ 2: কমা দ্বারা বিভাজন:

import java.util.regex.*;

public class PatternSplitExample {
    public static void main(String[] args) {
        String text = "apple,banana,grape,orange";

        // প্যাটার্ন কমা দ্বারা বিভাজন করা হচ্ছে
        Pattern pattern = Pattern.compile(",");
        String[] fruits = pattern.split(text);

        // বিভাজিত অংশগুলো প্রদর্শন করা
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

আউটপুট:

apple
banana
grape
orange

ব্যাখ্যা:

  • Pattern.compile(","): এখানে কমা (,) দ্বারা প্যাটার্ন তৈরি করা হয়েছে।
  • pattern.split(text): এটি text স্ট্রিংটিকে কমা দিয়ে বিভক্ত করে এবং প্রতিটি ফ্রুটের নাম পৃথক পৃথক করে দেয়।

উদাহরণ 3: একাধিক সেপারেটর দ্বারা বিভাজন:

ধরা যাক, আপনি একটি স্ট্রিংকে একাধিক সেপারেটরের ভিত্তিতে বিভক্ত করতে চান (যেমন স্পেস অথবা কমা)।

import java.util.regex.*;

public class PatternSplitExample {
    public static void main(String[] args) {
        String text = "apple,banana grape,orange";

        // প্যাটার্ন কমা অথবা স্পেস দ্বারা বিভাজন
        Pattern pattern = Pattern.compile("[,\\s]+");  // Match comma or whitespace
        String[] fruits = pattern.split(text);

        // বিভাজিত অংশগুলো প্রদর্শন করা
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

আউটপুট:

apple
banana
grape
orange

ব্যাখ্যা:

  • Pattern.compile("[,\\s]+"): এখানে আমরা কমা (,) অথবা এক বা একাধিক স্পেস (\\s+) দিয়ে স্ট্রিং বিভক্ত করার জন্য প্যাটার্ন তৈরি করেছি।
  • pattern.split(text): এটি text স্ট্রিংটিকে কমা এবং স্পেসের ভিত্তিতে বিভক্ত করে।

Pattern.split() পদ্ধতির কিছু গুরুত্বপূর্ণ পয়েন্ট:

  1. Multiple Delimiters: আপনি একাধিক সেপারেটর (যেমন কমা এবং স্পেস) দিয়ে স্ট্রিং বিভক্ত করতে পারেন, যা উপরের উদাহরণে দেখানো হয়েছে।
  2. Empty Strings: যদি স্ট্রিংটি সেপারেটর দিয়ে শুরু বা শেষ হয়, তাহলে অ্যারে তে খালি স্ট্রিং থাকতে পারে।
  3. Limit Parameter: Pattern.split() এর একটি ভার্সন রয়েছে যেখানে আপনি বিভাজনের সর্বাধিক সংখ্যা নির্ধারণ করতে পারেন।

Limit Parameter সহ split():

Pattern pattern = Pattern.compile(",");
String[] fruits = pattern.split("apple,banana,grape,orange", 2);

এটি প্রথম দুটি অংশ করবে এবং বাকিটা একত্রে রাখবে।

Pattern.split() পদ্ধতি একটি শক্তিশালী এবং নমনীয় পদ্ধতি যা স্ট্রিং বিভাজন করতে ব্যবহৃত হয়। এটি বিশেষ করে এমন ক্ষেত্রে কাজে আসে যেখানে আপনাকে নির্দিষ্ট প্যাটার্ন বা সেপারেটর দিয়ে স্ট্রিং বিভক্ত করতে হয়। আপনি একাধিক সেপারেটর, স্পেস, অথবা কমা দিয়ে স্ট্রিং বিভক্ত করতে পারেন এবং এর মাধ্যমে স্ট্রিং বিশ্লেষণ এবং প্রক্রিয়াকরণ আরও সহজ ও দ্রুত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...