Java-তে Regex (Regular Expressions) এবং String এর সাথে রিফ্লেকশন ব্যবহারের দুটি আলাদা ধারণা। Regex স্ট্রিং ম্যানিপুলেশন ও মেলানোর জন্য ব্যবহৃত হয়, আর Java Reflection ক্লাসের মাধ্যমে আমরা কোডের স্ট্রাকচার বা মেথড/ফিল্ড/ক্লাস সম্পর্কে তথ্য সংগ্রহ করতে পারি।
এখানে আমি String এর সাথে Regex ব্যবহারের কিছু প্রাথমিক উদাহরণ এবং Matcher ক্লাসের reset() মেথড ব্যবহার করে পুনরায় মেলানোর (re-matching) ধারণা ব্যাখ্যা করব।
১. String এর সাথে Regex ব্যবহার:
Java-তে String ক্লাসের matches() মেথড এবং replaceAll() মেথডের মাধ্যমে রেগুলার এক্সপ্রেশন ব্যবহার করা যায়। তবে, যদি আপনি আরো জটিল প্যাটার্নের সাথে কাজ করতে চান, তাহলে Pattern এবং Matcher ক্লাস ব্যবহার করা হবে।
matches() মেথড:
matches() মেথডটি একটি স্ট্রিংকে রেগুলার এক্সপ্রেশন প্যাটার্নের সাথে ম্যাচ করায়। এটি শুধুমাত্র তখনই মেলে যখন পুরো স্ট্রিংটি প্যাটার্নের সাথে মেলে।
public class RegexWithStringExample {
public static void main(String[] args) {
String text = "hello";
// Regular expression to match 'hello'
boolean matches = text.matches("hello");
System.out.println("Does the text match? " + matches); // Output: true
}
}
ব্যাখ্যা:
matches()মেথডটি স্ট্রিংয়ের পুরো অংশের সাথে প্যাটার্নটি মেলাতে চেষ্টা করে। এখানেtext.matches("hello")প্যাটার্নটি পুরোপুরিhelloশব্দের সাথে মেলে।
replaceAll() মেথড:
replaceAll() মেথডটি একটি রেগুলার এক্সপ্রেশন প্যাটার্ন দিয়ে স্ট্রিংয়ের সমস্ত ম্যাচকে প্রতিস্থাপন করে।
public class ReplaceAllWithRegexExample {
public static void main(String[] args) {
String text = "apple orange banana apple";
// Regular expression to replace 'apple' with 'fruit'
String result = text.replaceAll("apple", "fruit");
System.out.println("Updated text: " + result); // Output: fruit orange banana fruit
}
}
ব্যাখ্যা:
replaceAll()মেথডটি স্ট্রিংয়ের মধ্যে প্যাটার্নের সমস্ত ম্যাচ খুঁজে এবং তাকে নতুন স্ট্রিং দিয়ে প্রতিস্থাপন করে। এখানে"apple"শব্দটি"fruit"দিয়ে প্রতিস্থাপন করা হয়েছে।
২. Matcher Reset করা এবং পুনরায় Matching করা:
Matcher ক্লাসের reset() মেথডটি স্ট্রিং বা ইনপুটের সাথে পুনরায় মেলানোর জন্য ব্যবহৃত হয়। এটি একটি Matcher অবজেক্টকে পুনরায় ব্যবহারযোগ্য করে তোলে।
reset() মেথড:
reset() মেথডটি Matcher অবজেক্টের স্টেট রিসেট করে এবং আবার ইনপুট স্ট্রিংয়ের সাথে নতুনভাবে ম্যাচিং করতে সক্ষম হয়।
উদাহরণ:
import java.util.regex.*;
public class MatcherResetExample {
public static void main(String[] args) {
String text = "apple orange banana apple";
// Regular expression to match the word 'apple'
Pattern pattern = Pattern.compile("apple");
// Create Matcher
Matcher matcher = pattern.matcher(text);
// First match attempt
while (matcher.find()) {
System.out.println("First match: " + matcher.group());
}
// Reset matcher to reuse it for the same input
matcher.reset();
// Second match attempt after reset
System.out.println("After reset:");
while (matcher.find()) {
System.out.println("Second match: " + matcher.group());
}
}
}
Output:
First match: apple
First match: apple
After reset:
Second match: apple
Second match: apple
ব্যাখ্যা:
- প্রথমে
matcher.find()ব্যবহার করে"apple"শব্দ দুটি খুঁজে বের করা হয়েছে। এরপরmatcher.reset()মেথড কল করা হয়েছে যা মেচার অবজেক্টের স্টেট রিসেট করে এবং আবার স্ট্রিংয়ের সাথে নতুনভাবে ম্যাচিং শুরু করার সুযোগ দেয়।
৩. Pattern এবং Matcher ক্লাসের মধ্যে সম্পর্ক:
- Pattern ক্লাসে রেগুলার এক্সপ্রেশন তৈরি এবং কম্পাইল করা হয়।
- Matcher ক্লাসে সেই প্যাটার্নের সাথে স্ট্রিংয়ের মিল খোঁজা হয়।
- reset() মেথডের মাধ্যমে আপনি Matcher অবজেক্ট পুনরায় ব্যবহার করতে পারেন যাতে একই প্যাটার্ন এবং ইনপুটের সাথে পুনরায় ম্যাচিং করতে পারেন।
৪. Regex-এ অন্যান্য গুরুত্বপূর্ণ মেথড:
find(): এটি ইনপুট স্ট্রিংয়ে প্যাটার্নের প্রথম ম্যাচ খুঁজে বের করে।group(): এটি খুঁজে পাওয়া ম্যাচের স্ট্রিং ফেরত দেয়।replaceAll(): এটি সমস্ত ম্যাচকে একটি নতুন স্ট্রিং দ্বারা প্রতিস্থাপন করে।matches(): এটি স্ট্রিংটির পুরো অংশের সাথে প্যাটার্ন মিলছে কিনা তা চেক করে।- Regex এবং String একত্রে ব্যবহৃত হয় Java-তে স্ট্রিংয়ের সাথে বিভিন্ন ধরনের প্যাটার্ন ম্যাচিং, পরিবর্তন এবং যাচাই করতে।
- Matcher ক্লাসের
reset()মেথডটি ব্যবহার করে আপনি একটি Matcher অবজেক্টকে পুনরায় ব্যবহারযোগ্য করতে পারেন এবং একই ইনপুট স্ট্রিংয়ের সাথে পুনরায় প্যাটার্ন ম্যাচ করতে পারেন। - Pattern এবং Matcher ক্লাসের মাধ্যমে আপনি উন্নত প্যাটার্ন ভিত্তিক স্ট্রিং ম্যানিপুলেশন করতে পারেন, যেমন স্ট্রিং অনুসন্ধান, প্রতিস্থাপন ইত্যাদি।
String.matches() মেথডটি Java-তে একটি স্ট্রিংয়ের সাথে রেগুলার এক্সপ্রেশন প্যাটার্ন ম্যাচ করার জন্য ব্যবহৃত হয়। এটি একটি সহজ পদ্ধতি যা স্ট্রিংয়ের পুরো অংশের সাথে প্যাটার্ন মিলিয়ে দেখে। যদি পুরো স্ট্রিংটি প্যাটার্নের সাথে মেলে, তবে এটি true রিটার্ন করে, নাহলে false রিটার্ন করে।
String.matches() মেথডের সিনট্যাক্স:
boolean matches(String regex)
regex: এটি একটি স্ট্রিং আর্গুমেন্ট যা রেগুলার এক্সপ্রেশন প্যাটার্ন হয়।- এই মেথডটি স্ট্রিংটির পুরো অংশকে রেগুলার এক্সপ্রেশন প্যাটার্নের সাথে মিলিয়ে দেখে। যদি পুরো স্ট্রিং প্যাটার্নের সাথে মেলে, তবে এটি
trueরিটার্ন করে, অন্যথায়falseরিটার্ন করে।
ব্যবহার:
String.matches()মেথডটি সরাসরি স্ট্রিংয়ের মধ্যে রেগুলার এক্সপ্রেশন প্যাটার্ন চেক করতে ব্যবহৃত হয়। এটিPatternএবংMatcherক্লাসের মতো সাধারণত পুরো স্ট্রিংয়ের সাথে মেলানোর জন্য ব্যবহৃত হয়।
Simple Matching Example:
এখানে String.matches() এর মাধ্যমে সিম্পল ম্যাচিং দেখানো হচ্ছে।
উদাহরণ 1: একটি প্যাটার্নের সাথে স্ট্রিং মিলানো
public class SimpleMatchingExample {
public static void main(String[] args) {
String text = "hello";
// Match if the string equals "hello"
if (text.matches("hello")) {
System.out.println("Match found!");
} else {
System.out.println("No match found.");
}
}
}
Output:
Match found!
ব্যাখ্যা:
- এখানে
"hello"স্ট্রিংটি"hello"প্যাটার্নের সাথে পুরোপুরি মেলে। তাইmatches()মেথডটিtrueরিটার্ন করেছে এবং "Match found!" প্রিন্ট হয়েছে।
উদাহরণ 2: ডিজিট চেক করা
public class SimpleMatchingExample {
public static void main(String[] args) {
String text = "12345";
// Match if the string contains only digits
if (text.matches("\\d+")) {
System.out.println("The string contains only digits.");
} else {
System.out.println("The string does not contain only digits.");
}
}
}
Output:
The string contains only digits.
ব্যাখ্যা:
\\d+প্যাটার্নটি নিশ্চিত করে যে স্ট্রিংটি এক বা একাধিক ডিজিট (0-9) ধারণ করছে। এখানে"12345"একটি ডিজিটের স্ট্রিং, তাইmatches()মেথডটিtrueরিটার্ন করেছে।
উদাহরণ 3: ইমেইল ফরম্যাট চেক করা
public class SimpleMatchingExample {
public static void main(String[] args) {
String email = "test@example.com";
// Match if the string is a valid email format
if (email.matches("[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,}")) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
Output:
Valid email address.
ব্যাখ্যা:
[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,}প্যাটার্নটি একটি সাধারণ ইমেইল ঠিকানা যাচাইয়ের জন্য ব্যবহৃত হয়। এটি শুধুমাত্র একটি বৈধ ইমেইল ঠিকানার জন্য মিলবে, যেখানে@এবং., এবং উপযুক্ত অক্ষর উপস্থিত থাকবে।
String.matches() এর সীমাবদ্ধতা:
matches()মেথডটি স্ট্রিংয়ের পুরো অংশের সাথে মিলায়। এটি আংশিক মিলানোর জন্য উপযুক্ত নয়।- যদি আপনি আংশিক স্ট্রিং মেলানোর জন্য রেগুলার এক্সপ্রেশন ব্যবহার করতে চান, তবে
PatternএবংMatcherক্লাসেরfind()মেথড ব্যবহার করা উচিত।
উদাহরণ 4: আংশিক ম্যাচিং
public class PartialMatchingExample {
public static void main(String[] args) {
String text = "hello world";
// Attempt to match "world" in the string
if (text.matches(".*world.*")) {
System.out.println("Match found!");
} else {
System.out.println("No match found.");
}
}
}
Output:
Match found!
ব্যাখ্যা:
.*world.*প্যাটার্নটি স্ট্রিংয়ের মধ্যেworldখুঁজে বের করার জন্য ব্যবহৃত হয়েছে, যেটি যেকোনো স্থানে থাকতে পারে। এখানে"hello world"স্ট্রিংটি"world"প্যাটার্নের সাথে মেলে, তাই এটি সফলভাবে মেলে।String.matches()একটি সহজ পদ্ধতি যা স্ট্রিংয়ের পুরো অংশের সাথে রেগুলার এক্সপ্রেশন প্যাটার্ন মেলাতে ব্যবহৃত হয়। এটিPatternএবংMatcherক্লাসের মতো আরও উন্নত বৈশিষ্ট্য প্রদান করে না, কিন্তু সহজ স্ট্রিং ম্যাচিংয়ের জন্য এটি খুবই কার্যকরী।- আপনি
matches()মেথডটি ব্যবহার করতে পারেন যখন আপনি নিশ্চিত হতে চান যে একটি স্ট্রিং পুরোপুরি একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে। তবে যদি আপনাকে আংশিক মিল (partial match) খুঁজতে হয়, তখনPatternএবংMatcherক্লাস ব্যবহার করা উচিত।
Java Reflection Package (java.lang.reflect) সাধারণত Pattern এবং Matcher ক্লাসের সাথে কাজ করে regular expressions ব্যবহারের জন্য, কিন্তু String.replaceAll() এবং String.replaceFirst() মেথডগুলি সরাসরি স্ট্রিং-এ টেক্সট রিপ্লেস করার জন্য ব্যবহৃত হয়। এগুলি রেগুলার এক্সপ্রেশন বা সাধারণ স্ট্রিং প্যাটার্নের মাধ্যমে টেক্সট রিপ্লেস করতে পারে, যা আপনাকে স্ট্রিং ম্যানিপুলেশনের ক্ষমতা প্রদান করে।
1. String.replaceAll() Method:
replaceAll() মেথডটি একটি স্ট্রিংয়ের সমস্ত অংশ যেগুলি একটি নির্দিষ্ট রেগুলার এক্সপ্রেশন বা প্যাটার্নের সাথে মেলে, সেগুলিকে নতুন স্ট্রিং দ্বারা রিপ্লেস করে। এটি একটি regex প্যাটার্ন নেয় এবং টেক্সটের সব মিল পাওয়া অংশকে রিপ্লেস করে।
Syntax:
String result = originalString.replaceAll(String regex, String replacement);
regex: এটি একটি রেগুলার এক্সপ্রেশন প্যাটার্ন যা আপনি রিপ্লেস করতে চান এমন অংশ চিহ্নিত করবে।replacement: এটি নতুন স্ট্রিং যা মিল পাওয়া অংশের স্থানে রাখা হবে।
Example:
public class ReplaceAllExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog.";
// Replace all occurrences of 'the' (case-insensitive)
String result = text.replaceAll("(?i)the", "a");
System.out.println(result); // Output: "A quick brown fox jumps over a lazy dog."
}
}
ব্যাখ্যা:
replaceAll("(?i)the", "a"): এটি"the"শব্দটি সমস্ত ক্ষেত্রে (case-insensitive)"a"দিয়ে রিপ্লেস করে।(?i)ফ্ল্যাগটি case-insensitive matching সক্রিয় করে।
Output:
A quick brown fox jumps over a lazy dog.
2. String.replaceFirst() Method:
replaceFirst() মেথডটি স্ট্রিংয়ের প্রথম মিল পাওয়া অংশটিকে রিপ্লেস করে। এটি একটি regex প্যাটার্ন নেয় এবং প্রথম ম্যাচিং অংশটি নতুন স্ট্রিং দ্বারা রিপ্লেস করে।
Syntax:
String result = originalString.replaceFirst(String regex, String replacement);
regex: এটি একটি রেগুলার এক্সপ্রেশন প্যাটার্ন যা আপনি রিপ্লেস করতে চান এমন অংশ চিহ্নিত করবে।replacement: এটি নতুন স্ট্রিং যা প্রথম মিল পাওয়া অংশের স্থানে রাখা হবে।
Example:
public class ReplaceFirstExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog.";
// Replace the first occurrence of 'the' (case-insensitive)
String result = text.replaceFirst("(?i)the", "a");
System.out.println(result); // Output: "A quick brown fox jumps over the lazy dog."
}
}
ব্যাখ্যা:
replaceFirst("(?i)the", "a"): এটি"the"শব্দের প্রথম মিলটিকে রিপ্লেস করে।(?i)ফ্ল্যাগটি case-insensitive matching সক্রিয় করে।
Output:
A quick brown fox jumps over the lazy dog.
তুলনা: replaceAll() এবং replaceFirst()
| Method | Description | Example | Output |
|---|---|---|---|
replaceAll() | সমস্ত ম্যাচিং অংশকে রিপ্লেস করে। | replaceAll("the", "a") | "A quick brown fox jumps over A lazy dog." |
replaceFirst() | প্রথম ম্যাচিং অংশটিকে রিপ্লেস করে। | replaceFirst("the", "a") | "A quick brown fox jumps over the lazy dog." |
replaceAll(): স্ট্রিংয়ের সমস্ত অংশের সাথে মিলিয়ে রিপ্লেস করে।replaceFirst(): স্ট্রিংয়ের প্রথম মিল পাওয়া অংশটি রিপ্লেস করে।
Advanced Example with Regular Expressions:
Example: Using replaceAll() to Remove Non-Alphanumeric Characters
public class ReplaceAllAdvancedExample {
public static void main(String[] args) {
String text = "Hello, @world! How's it going?";
// Remove all non-alphanumeric characters using regex
String result = text.replaceAll("[^a-zA-Z0-9\\s]", "");
System.out.println(result); // Output: "Hello world Hows it going"
}
}
ব্যাখ্যা:
[^a-zA-Z0-9\\s]: এই regex প্যাটার্নটি স্ট্রিং থেকে সমস্ত অ্যালফানিউমেরিক (a-z, A-Z, 0-9) এবং সাদা স্পেস ছাড়া অন্যান্য সমস্ত চরিত্র (যেমন@,!,') মুছে ফেলবে।
Output:
Hello world Hows it going
Reflection ব্যবহার করে replaceAll() এবং replaceFirst() মেথড অ্যাক্সেস:
যেহেতু replaceAll() এবং replaceFirst() মেথডগুলি সাধারণ স্ট্রিং অপারেশন, সেগুলি Reflection দ্বারা অ্যাক্সেস করা যেতে পারে যদি আপনি একাধিক স্ট্রিংয়ের উপর একই ধরনের অপারেশন প্রয়োগ করতে চান।
Example: Using Reflection to Invoke replaceAll() Method:
import java.lang.reflect.*;
public class ReflectionReplaceAllExample {
public static void main(String[] args) throws Exception {
String text = "Hello, @world! How's it going?";
// Get the 'replaceAll' method using reflection
Method replaceAllMethod = String.class.getMethod("replaceAll", String.class, String.class);
// Use reflection to invoke the method
String result = (String) replaceAllMethod.invoke(text, "[^a-zA-Z0-9\\s]", "");
System.out.println(result); // Output: "Hello world Hows it going"
}
}
ব্যাখ্যা:
- Reflection এর মাধ্যমে
replaceAll()মেথডকে ডাইনামিকভাবে কল করা হয়েছে। এখানেString.class.getMethod("replaceAll", String.class, String.class)মেথডটিreplaceAll()মেথডের রেফারেন্স দেয় এবংinvoke()এর মাধ্যমে এটি চালানো হয়।
Output:
Hello world Hows it going
replaceAll()এবংreplaceFirst()দুটি মেথডই স্ট্রিংয়ের মধ্যে প্যাটার্ন অনুসারে টেক্সট রিপ্লেস করতে ব্যবহৃত হয়।replaceAll(): সমস্ত ম্যাচিং অংশকে রিপ্লেস করে।replaceFirst(): প্রথম ম্যাচিং অংশটিকে রিপ্লেস করে।
- রেগুলার এক্সপ্রেশন প্যাটার্ন এবং Reflection এর মাধ্যমে এই মেথডগুলো আরও শক্তিশালী এবং ফ্লেক্সিবল হতে পারে।
Java String.split() মেথডটি স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট ডিলিমিটার বা প্যাটার্ন ব্যবহার করে একটি স্ট্রিংকে বিভক্ত (split) করতে ব্যবহৃত হয়। এটি সাধারণত একটি নির্দিষ্ট সীমানা বা প্রতীক (delimiter) ব্যবহার করে স্ট্রিংয়ের বিভিন্ন অংশে ভাগ করে এবং একটি String array রিটার্ন করে।
String.split() মেথডের Syntax:
public String[] split(String regex)
regex: এটি একটি রেগুলার এক্সপ্রেশন প্যাটার্ন, যার মাধ্যমে স্ট্রিংটিকে বিভক্ত করা হবে।- রিটার্ন টাইপ: এটি একটি
String[](স্ট্রিং অ্যারে) রিটার্ন করে, যেখানে স্ট্রিংটি নির্দিষ্ট প্যাটার্ন অনুসারে বিভক্ত করা হয়।
String.split() মেথডের একটি সাধারণ উদাহরণ:
public class StringSplitExample {
public static void main(String[] args) {
String text = "apple,banana,orange,grape";
// Split the string based on comma (',')
String[] fruits = text.split(",");
// Print each fruit name
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
Output:
apple
banana
orange
grape
ব্যাখ্যা:
split(","): এখানে স্ট্রিংটি কমা (,) দিয়ে বিভক্ত করা হয়েছে।- রিটার্ন হওয়া String[] অ্যারেতে "apple", "banana", "orange", এবং "grape" আলাদা আলাদা স্ট্রিং হিসেবে থাকে।
String.split() মেথডে রেগুলার এক্সপ্রেশন ব্যবহার:
split() মেথডটি রেগুলার এক্সপ্রেশন প্যাটার্ন ব্যবহার করতে পারে, তাই আপনি আরও জটিল ডিলিমিটার বা প্যাটার্ন দিয়ে স্ট্রিং বিভক্ত করতে পারেন।
1. Multiple Delimiters:
public class StringSplitExample {
public static void main(String[] args) {
String text = "apple;banana,orange.grape";
// Split the string based on multiple delimiters: semicolon, comma, and period
String[] fruits = text.split("[,;.]");
// Print each fruit name
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
Output:
apple
banana
orange
grape
ব্যাখ্যা:
- এখানে,
[ ,;.]প্যাটার্নটি কমা (,), সেমিকোলন (;), এবং ডট (.) - এই তিনটি ডিলিমিটার দিয়ে স্ট্রিং বিভক্ত করছে।
2. Split on Whitespace:
public class StringSplitExample {
public static void main(String[] args) {
String text = "apple banana orange grape";
// Split the string based on whitespace (space or tab)
String[] fruits = text.split("\\s+");
// Print each fruit name
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
Output:
apple
banana
orange
grape
ব্যাখ্যা:
\\s+: এটি একটি রেগুলার এক্সপ্রেশন, যা whitespace character (যেমন space, tab, newline) দিয়ে বিভক্ত করতে ব্যবহৃত হয়।+চিহ্নটি একাধিক whitespace character-কে একসাথে ক্যাপচার করতে সাহায্য করে।
3. Split with Limit:
public class StringSplitExample {
public static void main(String[] args) {
String text = "apple,banana,orange,grape";
// Split the string based on comma, with a limit of 2 parts
String[] fruits = text.split(",", 2);
// Print each part
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
Output:
apple
banana,orange,grape
ব্যাখ্যা:
split(",", 2): এখানে স্ট্রিংটি কমা (,) দিয়ে বিভক্ত হয়েছে, কিন্তু আমরা limit = 2 দিয়ে বিভক্তি সীমিত করেছি, অর্থাৎ প্রথম দুটি অংশে বিভক্ত হবে এবং বাকী অংশ একটি একক স্ট্রিং হিসেবে থাকবে।
Considerations and Limitations:
- Empty Strings:
- যদি ডিলিমিটার প্যাটার্ন স্ট্রিংয়ের শুরু বা শেষে থাকে, তাহলে
split()মেথড খালি স্ট্রিং (empty string) এন্ট্রি তৈরি করতে পারে। - Example:
"apple,,banana".split(",")এর আউটপুট হবে["apple", "", "banana"](একটি খালি স্ট্রিং থাকবে)।
- যদি ডিলিমিটার প্যাটার্ন স্ট্রিংয়ের শুরু বা শেষে থাকে, তাহলে
- Regular Expression:
split()মেথডে রেগুলার এক্সপ্রেশন ব্যবহৃত হয়, সুতরাং যদি আপনি একটি স্পেশাল ক্যারেক্টার (যেমন.বা*) ব্যবহার করতে চান, তাহলে সেগুলিকে escape করতে হবে।- Example: যদি আপনি
.দিয়ে বিভক্ত করতে চান, তবে আপনাকেsplit("\\.")ব্যবহার করতে হবে।
String.split() মেথডটি একটি স্ট্রিংকে নির্দিষ্ট ডিলিমিটার বা রেগুলার এক্সপ্রেশন প্যাটার্ন অনুসারে ভাগ করতে সহায়তা করে। এটি স্ট্রিং বিভক্ত করার জন্য একটি শক্তিশালী এবং সহজ পদ্ধতি প্রদান করে, যা বিভিন্ন ধরনের ডেটা প্রক্রিয়াকরণ এবং স্ট্রিং ম্যানিপুলেশন করতে ব্যবহৃত হয়।
String.contains() এবং Regex (Regular Expressions) জাভাতে টেক্সট ভ্যালিডেশনের জন্য দুটি জনপ্রিয় পদ্ধতি। আপনি যখন কোনও স্ট্রিংয়ের মধ্যে বিশেষ শব্দ বা প্যাটার্ন খুঁজে বের করতে চান, তখন String.contains() একটি সহজ এবং সরল পদ্ধতি হতে পারে, তবে যদি আপনার বেশি জটিল টেক্সট ভ্যালিডেশন প্রয়োজন হয় (যেমন স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন বা শর্ত অনুসরণ করা), তখন Regex ব্যবহার করা অনেক বেশি কার্যকরী হতে পারে।
এখানে আমি দুটি পদ্ধতির বর্ণনা এবং উদাহরণ দিচ্ছি:
১. String.contains() মেথড:
String.contains() মেথডটি একটি নির্দিষ্ট সাবস্ট্রিং যদি স্ট্রিংয়ের মধ্যে থাকে তা যাচাই করতে ব্যবহৃত হয়। এটি একটি বুলিয়ান রিটার্ন করে: true যদি সাবস্ট্রিংটি পাওয়া যায়, false যদি না পাওয়া যায়।
String.contains() ব্যবহার করার উদাহরণ:
public class StringContainsExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog.";
// Check if the string contains "fox"
if (text.contains("fox")) {
System.out.println("Text contains 'fox'.");
} else {
System.out.println("Text does not contain 'fox'.");
}
// Check if the string contains "cat"
if (text.contains("cat")) {
System.out.println("Text contains 'cat'.");
} else {
System.out.println("Text does not contain 'cat'.");
}
}
}
আউটপুট:
Text contains 'fox'.
Text does not contain 'cat'.
ব্যাখ্যা:
text.contains("fox"): এটি চেক করে যে স্ট্রিং"fox"রয়েছে কি না।text.contains("cat"): এটি চেক করে যে স্ট্রিং"cat"রয়েছে কি না। যেহেতু"cat"এখানে নেই, তাই এটিfalseরিটার্ন করবে।
২. Regex (Regular Expressions) দিয়ে Text Validation:
Regex একটি শক্তিশালী টুল যা স্ট্রিংয়ের মধ্যে জটিল প্যাটার্ন খোঁজার জন্য ব্যবহৃত হয়। আপনি যদি স্ট্রিংয়ের মধ্যে কোনো নির্দিষ্ট প্যাটার্ন, ফরম্যাট বা নিয়ম চেক করতে চান, তবে Regex ব্যবহার করা উপযুক্ত।
Regex ব্যবহার করে টেক্সট ভ্যালিডেশন:
ধরা যাক, আমরা একটি ইমেইল অ্যাড্রেস যাচাই করতে চাই। একটি সঠিক ইমেইল অ্যাড্রেসের জন্য আমাদের প্যাটার্ন হতে হবে:
- এটি একটি শব্দ, এরপর
@, তারপর আরেকটি শব্দ, তারপর.এবং শেষমেশ একটি ডোমেইন নাম।
Regex ব্যবহার করে ইমেইল ভ্যালিডেশন উদাহরণ:
import java.util.regex.*;
public class RegexValidationExample {
public static void main(String[] args) {
String email = "user@example.com";
// Define the regular expression for a valid email
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(emailRegex);
// Check if the email matches the regex pattern
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) {
System.out.println("The email is valid.");
} else {
System.out.println("The email is not valid.");
}
}
}
আউটপুট:
The email is valid.
ব্যাখ্যা:
emailRegex: এটি একটি রেগুলার এক্সপ্রেশন যা একটি সাধারণ ইমেইল ফরম্যাট চেক করে।Pattern.compile(emailRegex): এটি রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি করে।matcher.matches(): এটি চেক করে যে ইমেইল স্ট্রিংটি রেগুলার এক্সপ্রেশনটির সাথে মিলে কিনা। যদি মিলে, তবে এটিtrueরিটার্ন করে এবং ইমেইলটি বৈধ হিসেবে গণ্য হয়।
Regex এর অন্যান্য পদ্ধতি:
Pattern.matcher(): এটি একটি স্ট্রিং এবং রেগুলার এক্সপ্রেশন প্যাটার্ন দিয়ে একটি Matcher অবজেক্ট তৈরি করে, যার মাধ্যমে আপনি স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করতে পারেন।Matcher.find(): এটি স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করে।Matcher.matches(): এটি পুরো স্ট্রিংয়ের সাথে প্যাটার্ন মিলছে কিনা তা চেক করে।Matcher.group(): এটি গ্রুপগুলির মাধ্যমে রেফারেন্স প্যাটার্নের অংশ বের করতে সাহায্য করে।
এনহান্সড উদাহরণ: Phone Number Validation (Regex):
ধরা যাক, আমরা একটি ফোন নাম্বার যাচাই করতে চাই যেখানে + এর পরে country code, তারপর কিছু ডিজিট থাকতে হবে। আমরা একটি রেগুলার এক্সপ্রেশন ব্যবহার করব যা এই নিয়ম মেনে চলে।
import java.util.regex.*;
public class PhoneNumberValidation {
public static void main(String[] args) {
String phoneNumber = "+1-800-555-1234";
// Define the regular expression for a valid phone number
String phoneRegex = "^\\+\\d{1,3}-\\d{3}-\\d{3}-\\d{4}$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(phoneRegex);
// Check if the phone number matches the regex pattern
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
System.out.println("The phone number is valid.");
} else {
System.out.println("The phone number is not valid.");
}
}
}
আউটপুট:
The phone number is valid.
ব্যাখ্যা:
^\\+\\d{1,3}-\\d{3}-\\d{3}-\\d{4}$: এটি একটি রেগুলার এক্সপ্রেশন যা একটি ফোন নাম্বারের জন্য ভ্যালিডেশন করবে।^: স্ট্রিং শুরুতে\\+:+চিহ্ন\\d{1,3}: ১ থেকে ৩ ডিজিট-: হাইফেন চিহ্ন\\d{3}-\\d{3}-\\d{4}: তিনটি ডিজিট, একটি হাইফেন, আরও তিনটি ডিজিট, হাইফেন এবং চারটি ডিজিট$: স্ট্রিংয়ের শেষ
String.contains()সহজভাবে কোনও স্ট্রিংয়ে একটি সাবস্ট্রিং আছে কিনা তা চেক করার জন্য ব্যবহৃত হয়। এটি কেবল সাধারণ স্ট্রিং ম্যানিপুলেশনের জন্য উপযুক্ত।- Regex আরও শক্তিশালী এবং নমনীয় একটি পদ্ধতি যা কমপ্লেক্স টেক্সট ভ্যালিডেশন বা প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহার করা হয়। এটি আপনাকে জটিল স্ট্রিং ভ্যালিডেশন যেমন ইমেইল, ফোন নম্বর, ইউআরএল ইত্যাদি চেক করতে সাহায্য করে।
Read more