2013-05-13 73 views
4

從字符串中篩選出所有UTF-8標點符號和符號如「✁✂✃✄✅✇✈」等的最佳和最有效的方法是什麼?簡單地過濾出所有不是a-z,A-Z和0-9的字符都不是一種選擇,因爲我想保留來自其他語言的字母(±,ę,ó等) 在此先感謝。從字符串中篩選出UTF-8標點和符號

+0

點,昏迷,報價怎麼樣?他們是否應該過濾? – Pshemo 2013-05-13 16:44:50

回答

3

你可以使用\p{L}匹配所有Unicode字母。例如:

public static void main(String[] args) throws IOException { 
    String[] test = {"asdEWR1", "ąęóöòæûùÜ", "sd,", "✀","✁","✂","✃","✄","✅","✆","✇","✈"}; 
    for (String s : test) 
     System.out.println(s + " => " + s.replaceAll("[^\\p{L}^\\d]", "")); 
} 

輸出:

asdEWR1 => asdEWR1 
ąęóöòæûùÜ => ąęóöòæûùÜ 
sd, => sd 
✀ => 
✁ => 
✂ => 
✃ => 
✄ => 
✅ => 
✆ => 
✇ => 
✈ => 
+0

謝謝!這正是我需要的 – user1315305 2013-05-13 16:48:56

+0

對於那些需要JavaScript的人來說:https://www.npmjs.com/package/xregexp – Dan 2017-12-29 17:12:10

0

術語「標點符號」相當模糊。 Character類提供了一個getType()方法,該方法至少映射Unicode規範中定義的character categories的某些部分,因此這可能是開始的最佳位置。

我建議同樣應用「正面」邏輯(例如所有字符和數字)而不是「負面」邏輯(沒有標點符號),因爲測試可能會簡單得多。

1

的想法是首先去除口音。

public static String onlyASCII(String s) { 
    // Decompose any ŝ into s and combining-^. 
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); 
    // Removee all non-ASCII 
    return s2.replaceAll("[^\\u0000-\\u007E\\pL]", ""); 
} 

對於希臘文和這樣的\\pL字母。

相關問題