সমস্যা
একটি স্ট্রিং থেকে ১ এবং ২ বাদ দিয়ে বাকি সব ডিজিট (০, ৩-৯) মুছে ফেলা দরকার।
সমাধান কৌশল
- রেজেক্স `
(?<!\\d)1(?!\\d)` দিয়ে একক '১' ম্যাচ করুন (লুকআহেড/লুকবিহাইন্ড ব্যবহার করে) এবং `one` দিয়ে রিপ্লেস করুন। - রেজেক্স `
(?<!\\d)2(?!\\d)` দিয়ে একক '২' ম্যাচ করুন এবং `two` দিয়ে রিপ্লেস করুন। - বাকি সব ডিজিট `
\\s*\\d+` দিয়ে ম্যাচ করে খালি স্ট্রিং দিয়ে রিপ্লেস করুন।
কোড উদাহরণ
import java.util.Scanner;
public class RemoveNumbersExcept12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("একটি স্ট্রিং লিখুন: ");
String input = sc.nextLine();
// একক '1' ম্যাচ (লুকবিহাইন্ড + লুকআহেড)
String regex1 = "(?one, 2->two, বাকি ডিজিট->খালি
String result = input.replaceAll(regex1, "one")
.replaceAll(regex2, "two")
.replaceAll("\\s*\\d+", "");
System.out.println("ফলাফল: " + result);
}
}
আউটপুট উদাহরণ
একটি স্ট্রিং লিখুন: sample 1 2 3 4 5 6
ফলাফল: sample one two
রেজেক্স ব্যাখ্যা
| রেজেক্স | অর্থ |
|---|---|
(?<!\\d) | নেগেটিভ লুকবিহাইন্ড: আগে ডিজিট নেই |
1 | লিটারেল '১' |
(?!\\d) | নেগেটিভ লুকআহেড: পরে ডিজিট নেই |
\\s*\\d+ | ঐচ্ছিক স্পেস + এক বা অধিক ডিজিট |
দ্রষ্টব্য
- লুকআরাউন্ড (`(?
- এটি নিশ্চিত করে যে '১' বা '২' একটি স্বতন্ত্র সংখ্যা, বড় সংখ্যার অংশ নয় (যেমন ১২, ২১, ১২৩)।
- `replaceAll` চেইনিংয়ের ক্রম গুরুত্বপূর্ণ: আগে ১ ও ২ হ্যান্ডেল করুন, তারপর বাকি ডিজিট।
সারসংক্ষেপ
লুকআরাউন্ড অ্যাসারশন (`(?