Java正则表达式区分特殊字符,同时允许非英语字符

时间:2012-07-18 17:10:34

标签: java regex special-characters

我正在努力做到以上。一个选项是获取一组特殊字符的字符,然后使用一些java逻辑我们可以实现这一点。但是我必须确保包含所有特殊字符。

有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

听起来您想从Unicode字符串中删除所有控制字符。您可以通过在正则表达式中使用Unicode字符类别标识符来完成此操作。 “Cc”类别包含这些字符,请参阅http://www.fileformat.info/info/unicode/category/Cc/list.htm

myString = myString.replaceAll("[\p{Cc}]+", "");

答案 1 :(得分:0)

你需要决定什么是特殊角色。可能感兴趣的一种方法是Character.getType(char),它返回一个int,它将匹配Character的常量值之一,如Character.LOWERCASE_LETTER或Character.CURRENCY_SYMBOL。这使您可以确定角色的一般类别,然后您需要确定哪些类别被视为“特殊”字符,以及您将接受哪些类别作为文本的一部分。

请注意,Java使用UTF-16对其char和String值进行编码,因此您可能需要处理补充字符(请参阅getType方法说明中的链接)。这是一个令人讨厌的问题,但是Character方法确实提供了一些方法来帮助您检测这种情况并解决它。请参阅Character.isSupplementaryCodepoint(int)Character.codepointAt(char[], int)方法。

另外请注意,Java 6对Java的了解远不如Java 7.最新版本的Java在其Unicode数据库中添加了更多,但在Java 6上运行的代码将无法识别某些(实际上相当多)异乎寻常的代码点作为Unicode块或一般类别的一部分,因此在编写代码时需要牢记这一点。