Tôi có một chuỗi với rất nhiều ký tự đặc biệt. Tôi muốn xóa tất cả những thứ đó, nhưng vẫn giữ các ký tự theo thứ tự bảng chữ cái.
Tôi có thể làm cái này như thế nào?
Câu trả lời:
Điều đó phụ thuộc vào những gì bạn muốn nói. Nếu bạn chỉ muốn loại bỏ chúng, hãy làm như sau:
(Cập nhật: Rõ ràng bạn cũng muốn giữ các chữ số, hãy sử dụng các dòng thứ hai trong trường hợp đó)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
hoặc tương đương:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(Tất cả những điều này có thể được cải thiện đáng kể bằng cách biên dịch trước mẫu regex và lưu trữ nó trong một hằng số)
Hoặc, với Ổi :
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
Nhưng nếu bạn muốn biến các ký tự có dấu thành một thứ gì đó hợp lý mà vẫn còn ascii, hãy xem những câu hỏi sau:
Tôi đang sử dụng cái này.
s = s.replaceAll("\\W", "");
Nó thay thế tất cả các ký tự đặc biệt từ chuỗi.
Đây
\ w: Một ký tự từ, viết tắt của [a-zA-Z_0-9]
\ W: Một ký tự không phải từ
Thay thế bất kỳ ký tự đặc biệt nào bằng
replaceAll("\\your special character","new character");
ví dụ: để thay thế tất cả sự xuất hiện của * bằng khoảng trắng
replaceAll("\\*","");
* câu lệnh này chỉ có thể thay thế một loại ký tự đặc biệt tại một thời điểm
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
Ở đây, tất cả các ký tự đặc biệt ngoại trừ dấu cách, dấu phẩy và dấu và được thay thế. Bạn cũng có thể bỏ qua dấu cách, dấu phẩy và dấu và bằng biểu thức chính quy sau.
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
Trong đó Đầu vào là chuỗi mà chúng ta cần thay thế các ký tự.
Theo ví dụ về câu trả lời của Andrzej Doyle , tôi nghĩ giải pháp tốt hơn là sử dụng org.apache.commons.lang3.StringUtils.stripAccents():
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
Bạn có thể sử dụng các biểu thức chính quy cơ bản trên các chuỗi để tìm tất cả các ký tự đặc biệt hoặc sử dụng các lớp mẫu và đối sánh để tìm kiếm / sửa đổi / xóa các chuỗi do người dùng xác định. Liên kết này có một số ví dụ đơn giản và dễ hiểu cho cụm từ thông dụng: http://www.vogella.de/articles/JavaRegularExpressions/article.html
Đối với dấu cách, hãy sử dụng "[^ az AZ 0-9]" mẫu này
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();