Tôi đang sử dụng removeNumbers
để loại bỏ tất cả các số trong một chuỗi cho trước với regex
"(^|)\\d+($|(\\d+)+($|)|)"
Regex để tìm số trong một chuỗi
Dưới đây là các mã:
public class Regex {
private static String removeNumbers(String s) {
s = s.trim();
s = s.replaceAll(" +", " ");
s = s.replaceAll("(^|)\\d+($|(\\d+)+($|)|)", " ");
return s.trim();
}
public static void main(String[] args) {
String[] tests = new String[] {"123", "123 456 stack 789", "123 456 789 101112 131415 161718 192021", "stack 123 456 overflow 789 com", "stack 123 456 overflow 789", "123stack 456", "123 stack456overflow", "123 stack456", "123! @456#567"};
for (int i = 0; i < tests.length; i++) {
String test = tests[i];
System.out.println("\"" + test + "\" => \"" + removeNumbers(test) + "\"");
}
}
}
Output:
"123" => ""
" 123 " => ""
"123 456 stack 789" => "stack"
"123 456 789 101112 131415 161718 192021" => ""
"stack 123 456 overflow 789 com" => "stack overflow com"
"stack 123 456 overflow 789" => "stack overflow"
"123stack 456" => "123stack"
"123 stack456overflow" => "stack456overflow"
"123 stack456" => "stack456"
"123! @456#567" => "123! @456#567"
Có cách nào tốt hơn để thực hiện việc này không?
Sửa:
Theo đề nghị của @ mbomb007 trong câu trả lời trước đây của ông, regex "(|^)[\\d ]+(|$)"
làm việc cũng như:
private static String removeNumbers(String s) {
s = s.trim();
s = s.replaceAll(" +", " ");
s = s.replaceAll("(|^)[\\d ]+(|$)", " ");
return s.trim();
}
Câu trả lời của tôi sai, nhưng bây giờ tôi đã sửa nó. Tôi đã đăng liên kết tới phiên bản web chạy regex dựa vào các trường hợp kiểm tra của bạn. – mbomb007
Sản lượng của bạn có chính xác không? Nếu có và bạn đang tìm cách viết lại mã của mình tốt hơn có vẻ như câu hỏi của bạn sẽ được hỏi trên http://codereview.stackexchange.com/. – Pshemo
Chuỗi có thể bắt đầu hoặc kết thúc bằng dấu cách không? – Pshemo