java.lang.reflect
) এর মূল উদ্দেশ্য হল রানটাইমে ক্লাসের মেটাডেটা (metadata) অ্যাক্সেস করা এবং ডাইনামিকভাবে ক্লাসের মেথড, ফিল্ড, কনস্ট্রাক্টর ইত্যাদি ম্যানিপুলেট করা। এটি মূলত ক্লাসের আর্কিটেকচার বা ডিজাইন সম্পর্কিত কাজ করতে ব্যবহৃত হয়। তবে, আপনি যে বিষয়গুলো জানতে চাচ্ছেন, যেমন Dynamic Pattern Generation এবং Complex Data Structures Matching, এসব সাধারণত Regular Expressions (Regex) এবং Java Collections এর মধ্যে ব্যবহৃত কৌশল।এখানে Dynamic Pattern Generation এবং Complex Data Structures Matching নিয়ে আলোচনা করা হবে, যেগুলি Regex এবং Java Reflection ব্যবহার করে বাস্তবায়িত হতে পারে।
Dynamic Pattern Generation বা ডাইনামিক প্যাটার্ন তৈরি করা হল এমন একটি প্রক্রিয়া, যেখানে রেগুলার এক্সপ্রেশন (Regex) এর প্যাটার্ন রানটাইমে তৈরি করা হয়। এটি ব্যবহারকারীর ইনপুট বা অন্যান্য ভেরিয়েবল ডেটা অনুসারে একটি প্যাটার্ন তৈরি করতে সাহায্য করে।
ধরা যাক, আমাদের একটি প্রোগ্রাম দরকার যেখানে প্যাটার্নটি ডাইনামিকভাবে তৈরি হয় ব্যবহারকারীর ইনপুটের ভিত্তিতে, যেমন যদি ব্যবহারকারী তার নাম, বয়স বা অন্য কোনো তথ্য প্রদান করে।
import java.util.regex.*;
import java.util.Scanner;
public class DynamicPatternGeneration {
public static void main(String[] args) {
// Create a scanner object to take user input
Scanner scanner = new Scanner(System.in);
// Take user input for dynamic pattern
System.out.println("Enter the pattern type (e.g., phone number or email): ");
String patternType = scanner.nextLine().toLowerCase();
String patternString = "";
// Generate dynamic pattern based on user input
if (patternType.equals("phone number")) {
patternString = "^\\+\\d{1,3}-\\d{3}-\\d{3}-\\d{4}$"; // Phone number pattern
} else if (patternType.equals("email")) {
patternString = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"; // Email pattern
} else {
System.out.println("Unknown pattern type.");
return;
}
// Compile the generated pattern
Pattern pattern = Pattern.compile(patternString);
// Take input from user to validate against generated pattern
System.out.println("Enter the value to validate: ");
String inputValue = scanner.nextLine();
// Create a matcher object
Matcher matcher = pattern.matcher(inputValue);
// Validate input value against the dynamic pattern
if (matcher.matches()) {
System.out.println("Valid input!");
} else {
System.out.println("Invalid input!");
}
// Close scanner
scanner.close();
}
}
Enter the pattern type (e.g., phone number or email):
phone number
Enter the value to validate:
+1-800-555-1234
Valid input!
Complex Data Structures Matching বলতে বোঝানো হয়, একাধিক স্তরের ডেটা (যেমন: JSON, XML বা Nested Data) থেকে প্যাটার্ন মিলিয়ে কিছু ডেটা বের করা। Reflection এবং Regex দুটোই একসাথে ব্যবহার করে আপনি জটিল ডেটা স্ট্রাকচার ম্যানিপুলেট এবং মিলাতে পারেন।
ধরা যাক, আমরা একটি Nested Map ব্যবহার করব এবং সেখানে নির্দিষ্ট কী এর মান মিলিয়ে একটি ভ্যালিডেশন প্রক্রিয়া তৈরি করব।
import java.util.*;
import java.util.regex.*;
public class ComplexDataStructureMatching {
public static void main(String[] args) {
// Nested Map representing complex data structure
Map<String, Object> data = new HashMap<>();
Map<String, Object> userDetails = new HashMap<>();
userDetails.put("email", "user@example.com");
userDetails.put("phone", "+1-800-555-1234");
data.put("user", userDetails);
// Regex for phone number and email validation
String phoneRegex = "^\\+\\d{1,3}-\\d{3}-\\d{3}-\\d{4}$";
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Pattern compilation
Pattern phonePattern = Pattern.compile(phoneRegex);
Pattern emailPattern = Pattern.compile(emailRegex);
// Matching phone number and email in the nested structure
if (data.containsKey("user")) {
Map<String, Object> user = (Map<String, Object>) data.get("user");
// Matching phone number
String phone = (String) user.get("phone");
Matcher phoneMatcher = phonePattern.matcher(phone);
if (phoneMatcher.matches()) {
System.out.println("Valid phone number: " + phone);
} else {
System.out.println("Invalid phone number.");
}
// Matching email
String email = (String) user.get("email");
Matcher emailMatcher = emailPattern.matcher(email);
if (emailMatcher.matches()) {
System.out.println("Valid email: " + email);
} else {
System.out.println("Invalid email.");
}
}
}
}
Map<String, Object>
ব্যবহার করেছি যাতে user
নামে একটি কী রয়েছে, যার মান হলো আরেকটি Map
যা ইমেইল এবং ফোন নম্বর ধারণ করে।Valid phone number: +1-800-555-1234
Valid email: user@example.com
Reflection ব্যবহার করে আপনি ডাইনামিকভাবে Pattern তৈরি করতে পারেন। যেমন, যদি কোনো ক্লাসের অবজেক্টের ফিল্ডের নাম বা তার মানের ভিত্তিতে রেগুলার এক্সপ্রেশন তৈরি করতে চান, তখন Reflection এর মাধ্যমে সেই ফিল্ডের অ্যাক্সেস পাওয়া সম্ভব। তবে এটি সাধারণত কমপ্লেক্স ডেটা স্ট্রাকচার বা dynamic matching এ ব্যবহৃত হয়।
Read more