2011-06-04 87 views
21

我想去除一切,但,從字符串中的字符包括AZ,az和0-9,所以我需要創建Java的string.replaceAll(regex, "");正則表達式去除一切,但字符和數字

的舊字符串正規表達式是這樣的:

MAX EUK_1334-PP/B+ 

新的字符串應該是這樣的:

MAXEUK134PPB 

回答

60

有可能是一個更簡潔的正則表達式,但是這肯定會工作:

string.replaceAll("[^a-zA-Z0-9]", ""); 
+2

+1快速回答。我沒有在iPhone上快速輸入我的答案;-) – 2011-06-04 20:05:41

+8

如果讓它匹配多個字符,可能會更快,所以string.replaceAll(「[^ a-zA-Z0-9] +」,「」) 。 – MRAB 2011-06-04 20:20:30

+0

嘗試過的字符串24 \ 7.Strangely它返回24.爲什麼? – sandy 2013-04-29 16:50:26

17
string.replaceAll("[^a-zA-Z0-9]+", ""); 
+0

@MRAB稍後提到我決定一次替換幾個字符以獲得更好的性能 – 2016-02-29 11:20:59

2
String test = "MAX EUK_1334-PP/B+";  
test = test.replaceAll("[\\W_]", ""); 
System.out.println(test + "\n"); 

打印結果:

MAXEUK1334PPB 
+0

您是否知道'\ W'與「_'」字符不匹配? – 2011-06-04 20:09:15

+0

這個正則表達式將包含想要的字符*加上*下劃線。括號也是多餘的。 – stevevls 2011-06-04 20:09:30

+0

這會導致'unexpected char:'W''和 '無效的轉義序列(有效的轉義序列是\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)' – 2011-06-04 20:14:00

1

有些人忘記了 「_」 字符:

String regex = "[_\\W]";

public class RegexFun2 { 
    public static void main(String[] args) { 
     String test = "MAX EUK_1334-PP/B+"; 

     String regex = "[_\\W]"; 

     String result = test.replaceAll(regex, ""); 
     System.out.println(result); 
    } 
} 

但是我仍然認爲OP是在欺騙自己,並沒有證明他先試了一下,然後在他原來的問題中發表了他的嘗試。只是我2美分。

0

您可以使用ASCII值字符的:

while(!end of string){ 
    if(valueOfChar is between 48-57 or 65-90 or 97-122) 
      write it to your string 
} 

這可能會幫助,但我不知道你是否應該與replaceAll編寫代碼。 這兩個replaceAll和此代碼與相同的性能(O(n))工作。

相關問題