2017-04-06 209 views
0

如果我有一個字符串"ja.v_,a",如何刪除所有非字母字符以輸出"java"?我試過str = str.replaceAll("\\W", ""),但無濟於事。刪除字符串中的所有字符但字母

+0

你使用什麼編程語言? – Sedrick

+1

刪除/替換'[^ a-z]'? (即所有非字母'a..z'符號) –

+1

我將使用for循環來檢查每個字符。如果它是一個字符,我會連接到一個字符串。 Character.isAlphabetic()是一個起點 – Sedrick

回答

1

你可以試試這個嗎?

System.out.println("ja.v_,a".replaceAll("[^a-zA-Z]", "")) //java 
+0

這工作。謝謝! – Eragon20

0
String s = "ja.v_,a"; 
s = s.replaceAll("[^a-z]", ""); 
System.out.println(s); 

>java 
2

我想指的this article和帖吧:

正則表達式的例子和教程總是給你的[A-ZA-Z0-9] +正則表達式來 「驗證字母數字輸入」。它內置在許多驗證框架中。這是完全錯誤的。這是一個正則表達式,絕對不能出現在你的代碼中的任何地方,除非你有一個非常好的解釋。然而,這個例子無處不在。相反,正確的正則表達式是[\ p {L} 0-9] +

所以你的情況這將是:

str.replaceAll("[^\\p{L}]", ""); 
System.out.println("ja.v_,a".replaceAll("[^\\p{L}]", "")); 
System.out.println("сл-=о-_=во!".replaceAll("[^\\p{L}]", "")); 

\p{L}是個 「字母」 的Unicode定義。

+0

聲明'str.replaceAll(「[^ \ p {L}]」,「」);'是無用的。你需要以某種方式使用結果。 –

+1

@AndyTurner這是真的,我的觀點是,在2017年,「a-z」模式不會是一個好的開發人員習慣的最佳解決方案。理由在我提到的文章中闡述。 –

+1

這是一個重要的答案。我只會添加「\ p {L}'是」字母「的Unicode定義的解釋。 –

1
String test= "ja.v_,a"; 

int len=test.length(); 

String alphaString=""; 

for(int i=0; i<len; i++){ 
    if (Character.isLetter(test.charAt(i))) { 
     alphaString=alphaString+test.charAt(i); 
    } 
} 

System.out.println(alphaString); 
相關問題