从String中过滤出UTF-8标点和符号

时间:2013-05-13 16:33:15

标签: java regex utf-8

从字符串中过滤掉所有UTF-8标点字符和符号(例如✀✁✃✄✅✆✆✇等)的最佳和最有效的方法是什么。简单地过滤掉所有不在a-z,A-Z和0-9中的字符都不是一个选项,因为我想保留其他语言的字母(ą,ę,ó等) 提前谢谢。

4 个答案:

答案 0 :(得分:3)

尝试使用unicode binary classifications的组合:

String fixed = value.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");

答案 1 :(得分: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
✀ => 
✁ => 
✂ => 
✃ => 
✄ => 
✅ => 
✆ => 
✇ => 
✈ => 

答案 2 :(得分: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字母。

答案 3 :(得分:0)

术语"标点符号"相当含糊。 Character类提供了getType()方法,该方法至少映射到Unicode规范中定义的character categories中的一些,因此这可能是最佳起点。

我建议同时申请"肯定"逻辑(例如,所有字符和数字)而不是"否定"逻辑(没有标点符号),因为测试可能要简单得多。