পদ্ধতি ১: রেগুলার এক্সপ্রেশন (Regex) - সংক্ষিপ্ত
রেগেক্স \\A\\p{ASCII}*\\z পুরো স্ট্রিং ASCII ক্যারেক্টার ধারণ করছে কিনা চেক করে।
\\A: স্ট্রিংয়ের শুরু।\\p{ASCII}*: ASCII ক্যারেক্টার (0-127) শূন্য বা অধিকবার।\\z: স্ট্রিংয়ের শেষ।
উদাহরণ
import java.util.Scanner;
public class OnlyASCII {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string value: ");
String input = sc.nextLine();
// matches() পুরো স্ট্রিং ম্যাচ চেক করে
boolean result = input.matches("\\A\\p{ASCII}*\\z");
if(result) {
System.out.println("String approved (ASCII only)");
} else {
System.out.println("Contains non-ASCII values");
}
}
}
আউটপুট ১
Enter a string value: hello how are you String approved (ASCII only)
আউটপুট ২
Enter a string value: whÿ do we fall Contains non-ASCII values
পদ্ধতি ২: প্রতিটি ক্যারেক্টার চেক করা (ম্যানুয়াল)
ASCII ক্যারেক্টারগুলোর ইন্টিজার ভ্যালু ০ থেকে ১২৭ পর্যন্ত। প্রতিটি ক্যারেক্টার charAt(i) দিয়ে নিয়ে (int)ch করলে ১২৭-এর বেশি হলে নন-ASCII।
উদাহরণ
import java.util.Scanner;
public class OnlyASCII {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string value: ");
String input = sc.nextLine();
boolean result = true;
for(int i = 0; i < input.length(); i++) {
int codePoint = input.charAt(i); // char -> int (UTF-16 কোড ইউনিট)
if (codePoint > 127) {
result = false;
break;
}
}
System.out.println(result ? "String approved" : "Contains non-ASCII values");
}
}
দ্রষ্টব্য: charAt UTF-16 কোড ইউনিট রিটার্ন করে (BMP ক্যারেক্টারের জন্য ঠিক)। সারোগেট পেয়ার (Emoji, Rare chars) হ্যান্ডল করতে codePointAt() ব্যবহার করুন। String.chars().allMatch(c -> c <= 127) (Java 8 Stream) আরও ক্লিন।