2012-02-04 35 views

Trả lời

12
String foo = "this is a thing with & in it"; 
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", ""); 

Javadocs là bạn của bạn. Biểu thức chính quy cũng là bạn của bạn.

Edit:

Đó là Siad, đây chỉ là cho bảng chữ cái Latin; bạn có thể điều chỉnh cho phù hợp. \\w có thể được sử dụng cho a-zA-Z để biểu thị ký tự "từ" nếu nó hoạt động cho trường hợp của bạn mặc dù nó bao gồm _.

+0

Tham chiếu regexp Java chính: [java.util.regex.Pattern] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) – etech

0

Sử dụng mã này:

String s = "Test[]" 
s = s.replaceAll("["); 
s = s.replaceAll("]"); 
+2

Anh ấy sẽ muốn giữ các dấu ngoặc đơn ... –

0

myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
phương pháp replaceAll mất một regex như tham số đầu tiên và thay thế tất cả các trận đấu trong chuỗi. regex này phù hợp với tất cả các ký tự không phải là chữ số, chữ cái hoặc dấu gạch dưới (\\w) và niềng răng bạn cần (\\[\\]\\(\\)])

+0

Sử dụng '\ w' sẽ không làm, vì nó bao gồm es ký tự '_' - một ký tự không hợp lệ theo câu hỏi. –

+0

có lẽ anh ta chỉ quên về dấu gạch dưới? – shift66

+0

@ ÓscarLópez - không có trong Java và ngôn ngữ của tôi. –

3

Hãy thử điều này:

String s = "123abc&^%[]()"; 
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", ""); 
System.out.println(s); 

trên sẽ loại bỏ ký tự "&^%" trong chuỗi mẫu, để lại trong s chỉ "123abc[]()".

+3

Phụ thuộc vào định nghĩa của bạn về" số "," chữ cái "và như vậy. Tôi chắc chắn sẽ không mong đợi 'Straße' được thay đổi thành 'Strae'. Heck tôi muốn nói rằng nó là một 'ngây thơ' khá .. xin lỗi 'nave' giải pháp;) – Voo

+0

cũng giống như một FYI, bạn không cần phải thoát khỏi dấu ngoặc đơn. –

+0

@BrianRoach Cảm ơn bạn đã sửa nó. –

8

Sử dụng Guava, và gần như chắc chắn hiệu quả hơn (và dễ đọc hơn) so với regexes:

CharMatcher desired = CharMatcher.JAVA_DIGIT 
    .or(CharMatcher.JAVA_LETTER) 
    .or(CharMatcher.anyOf("()[]")) 
    .precomputed(); // optional, may improve performance, YMMV 
return desired.retainFrom(string); 
+5

Không cần phải lén lút. Đó là một thư viện Java, không có gì hơn, và một tiện dụng ở đó. –

+0

Đó không phải là cách bạn sử dụng CharMatcher.or(), nó chỉ mất một đối số – Stephan

0

Bạn có thể loại bỏ sản phẩm đặc biệt ký tự từ chuỗi của bạn/Url hoặc bất kỳ thông số yêu cầu bạn phải có được từ người dùng bên

public static String removeSpecialCharacters(String inputString){ 
     final String[] metaCharacters = {"../","\\..","\\~","~/","~"}; 
     String outputString=""; 
     for (int i = 0 ; i < metaCharacters.length ; i++){ 
      if(inputString.contains(metaCharacters[i])){ 
       outputString = inputString.replace(metaCharacters[i],""); 
       inputString = outputString; 
      }else{ 
       outputString = inputString; 
      } 
     } 
     return outputString; 
    } 
Các vấn đề liên quan