我正在尝试做上面的事情。一种选择是获取一组特殊字符,然后使用一些 java 逻辑我们可以完成此操作。但是我必须确保我包含所有特殊字符。
有没有更好的方法来做到这一点?
我正在尝试做上面的事情。一种选择是获取一组特殊字符,然后使用一些 java 逻辑我们可以完成此操作。但是我必须确保我包含所有特殊字符。
有没有更好的方法来做到这一点?
听起来您想从 Unicode 字符串中删除所有控制字符。您可以通过在正则表达式中使用 Unicode 字符类别标识符来完成此操作。“抄送”类别包含这些字符,请参阅http://www.fileformat.info/info/unicode/category/Cc/list.htm。
myString = myString.replaceAll("[\p{Cc}]+", "");
您需要决定什么是特殊字符。可能感兴趣的一种方法是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 对 Unicode 的了解远不及 Java 7。最新版本的 Java 在其 Unicode 数据库中添加了更多内容,但在 Java 6 上运行的代码将无法识别一些(实际上相当多)外来代码点为作为 Unicode 块或一般类别的一部分,因此在编写代码时需要牢记这一点。