Dùng regex \\W+ (non-word characters: không phải chữ, số, underscore) hoặc [^a-zA-Z] (chỉ giữ chữ cái) kết hợp với split() hoặc replaceAll().
Cách 1: Dùng split() + join (Giữ nguyên thứ tự từ)
import java.util.Scanner;
public class RemoveNonAlpha {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhập chuỗi: ");
String str = sc.nextLine();
// Tách bằng non-word chars, join lại
String[] tokens = str.split("\\W+");
StringBuilder result = new StringBuilder();
for (String token : tokens) {
result.append(token);
}
System.out.println("Kết quả: " + result);
}
}
Nhập chuỗi: Krishna ^% Kasyap*@# Kết quả: KrishnaKasyap
Cách 2: Dùng replaceAll() trực tiếp (Ngắn gọn hơn)
String input = "Krishna ^% Kasyap*@#";
String result = input.replaceAll("[^a-zA-Z]", ""); // Chỉ giữ A-Z, a-z
System.out.println(result); // KrishnaKasyap
So sánh regex
| Regex | Ý nghĩa | Giữ lại |
|---|---|---|
[^a-zA-Z] | Không phải chữ cái | Chỉ chữ cái (A-Z, a-z) |
[^a-zA-Z0-9] | Không phải chữ và số | Chữ + số |
\\W | Non-word ([^a-zA-Z0-9_]) | Chữ, số, underscore |
[^\\p{L}] | Không phải Unicode letter | Chữ cái mọi ngôn ngữ (UTF-8) |
Khuyên dùng: replaceAll("[^a-zA-Z]", "") cho ASCII; replaceAll("[^\\p{L}]", "") cho Unicode (hỗ trợ tiếng Việt, tiếng Nhật...).