我想去除一切,但,從字符串中的字符包括AZ,az和0-9,所以我需要創建Java的string.replaceAll(regex, "");
正則表達式去除一切,但字符和數字
的舊字符串正規表達式是這樣的:
MAX EUK_1334-PP/B+
新的字符串應該是這樣的:
MAXEUK134PPB
我想去除一切,但,從字符串中的字符包括AZ,az和0-9,所以我需要創建Java的string.replaceAll(regex, "");
正則表達式去除一切,但字符和數字
的舊字符串正規表達式是這樣的:
MAX EUK_1334-PP/B+
新的字符串應該是這樣的:
MAXEUK134PPB
有可能是一個更簡潔的正則表達式,但是這肯定會工作:
string.replaceAll("[^a-zA-Z0-9]", "");
string.replaceAll("[^a-zA-Z0-9]+", "");
@MRAB稍後提到我決定一次替換幾個字符以獲得更好的性能 – 2016-02-29 11:20:59
String test = "MAX EUK_1334-PP/B+";
test = test.replaceAll("[\\W_]", "");
System.out.println(test + "\n");
打印結果:
MAXEUK1334PPB
您是否知道'\ W'與「_'」字符不匹配? – 2011-06-04 20:09:15
這個正則表達式將包含想要的字符*加上*下劃線。括號也是多餘的。 – stevevls 2011-06-04 20:09:30
這會導致'unexpected char:'W''和 '無效的轉義序列(有效的轉義序列是\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)' – 2011-06-04 20:14:00
有些人忘記了 「_」 字符:
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美分。
您可以使用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)
)工作。
+1快速回答。我沒有在iPhone上快速輸入我的答案;-) – 2011-06-04 20:05:41
如果讓它匹配多個字符,可能會更快,所以string.replaceAll(「[^ a-zA-Z0-9] +」,「」) 。 – MRAB 2011-06-04 20:20:30
嘗試過的字符串24 \ 7.Strangely它返回24.爲什麼? – sandy 2013-04-29 16:50:26