Tôi đã thử sử dụng nhưng không được
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
Tôi đã thử sử dụng nhưng không được
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
Câu trả lời:
Sử dụng [^A-Za-z0-9]
.
Lưu ý: đã xóa khoảng trắng vì đó thường không được coi là chữ và số.
Thử
return value.replaceAll("[^A-Za-z0-9]", "");
hoặc là
return value.replaceAll("[\\W]|_", "");
return value.replaceAll("\\W", "");
Bạn nên lưu ý rằng [^a-zA-Z]
sẽ thay thế các ký tự không nằm trong phạm vi ký tự AZ / az. Điều đó có nghĩa là các ký tự đặc biệt như é
, ß
v.v. hoặc các ký tự cyrillic và như vậy sẽ bị xóa.
Nếu không muốn thay thế các ký tự này, hãy sử dụng các lớp ký tự được xác định trước thay thế:
str.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");
PS: \p{Alnum}
không đạt được hiệu ứng này, nó hoạt động giống như [A-Za-z0-9]
.
[^\\p{IsAlphabetic}\\p{IsDigit}]
hoạt động tốt
{IsDigit}
không phù hợp với tôi và {Digit}
tôi đang thử điều này trên Android. Và Android đã được UNICODE_CHARACTER_CLASS
bật theo mặc định. Cảm ơn đã giải phóng mặt bằng.
Tôi đã thực hiện phương pháp này để tạo tên tệp:
public static String safeChar(String input)
{
char[] allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
char[] charArray = input.toString().toCharArray();
StringBuilder result = new StringBuilder();
for (char c : charArray)
{
for (char a : allowed)
{
if(c==a) result.append(a);
}
}
return result.toString();
}
value.replaceAll("[^A-Za-z0-9]", "")
[^abc]
Khi một dấu mũ^
xuất hiện dưới dạng ký tự đầu tiên bên trong dấu ngoặc vuông, nó sẽ phủ nhận mẫu. Mẫu này phù hợp với bất kỳ ký tự nào ngoại trừ a hoặc b hoặc c.
Nhìn vào từ khóa như hai chức năng:
[(Pattern)] = match(Pattern)
[^(Pattern)] = notMatch(Pattern)
Hơn nữa liên quan đến một mô hình:
A-Z = all characters included from A to Z
a-z = all characters included from a to z
0=9 = all characters included from 0 to 9
Do đó, nó sẽ thay thế tất cả các char KHÔNG có trong mẫu
Nếu bạn cũng muốn cho phép các ký tự chữ và số không thuộc về các ký tự ascii được đặt, ví dụ như tiếng Đức umlaut, bạn có thể xem xét sử dụng giải pháp sau:
String value = "your value";
// this could be placed as a static final constant, so the compiling is only done once
Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);
value = pattern.matcher(value).replaceAll("");
Xin lưu ý rằng việc sử dụng cờ UNICODE_CHARACTER_CLASS có thể áp dụng hình phạt hiệu suất (xem javadoc của cờ này)
Phương pháp đơn giản:
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public String normalizeOnlyLettersNumbers(String str) {
if (!isBlank(str)) {
return str.replaceAll("[^\\p{L}\\p{Nd}]+", "");
} else {
return "";
}
}
public static void main(String[] args) {
String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";
System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));
}
đầu ra: ChlamydiasppIgGIgMIgAAbs8006
Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java
CharMatcher của Guava cung cấp một giải pháp ngắn gọn:
output = CharMatcher.javaLetterOrDigit().retainFrom(input);