从字符串中过滤掉所有 UTF-8 标点字符和符号(如 ✀ ✁ ✂ ✃ ✄ ✅ ✆ ✇ ✈ 等)的最佳和最有效的方法是什么。简单地过滤掉所有不在 az、AZ 和 0-9 中的字符不是一个选项,因为我想保留来自其他语言的字母(ą、ę、ó 等)提前谢谢。
问问题
1295 次
4 回答
3
尝试 unicode二进制分类的组合:
String fixed = value.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");
于 2013-05-13T16:38:49.603 回答
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
✀ =>
✁ =>
✂ =>
✃ =>
✄ =>
✅ =>
✆ =>
✇ =>
✈ =>
于 2013-05-13T16:41:03.703 回答
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
字母。
于 2013-05-13T16:52:24.703 回答