检测Java中的任何组合字符
我正在寻找一种方法来检测java字符串中的字符是否是“组合字符”。 例如,
String khmerCombiningVowel = new String(new byte[]{(byte) 0xe1,(byte) 0x9f,(byte) 0x80}, "UTF-8"); // unicode 17c0
代表结合高棉元音符号 。 我试过"\\p{InCombiningDiacriticalMarks}"
正则表达式,但似乎并不适用于这些特殊的组合字符。 或者即使有一些全面的unicode组合字符块列表,我也可以为它们制作一个正则表达式?
根据用于检查Unicode中组合字符的算法 ,有许多用于组合字符的块。
Java有许多有用的function,请尝试:
String codePointStr = new String(new byte[]{(byte) 0xe1, (byte) 0x9f, (byte) 0x80}, "UTF-8"); // unicode 17c0 System.out.println(codePointStr.matches("\\p{Mc}")); System.out.println( Character.COMBINING_SPACING_MARK == Character.getType(codePointStr.codePointAt(0)));
(在两种情况下都打印为true)
在这种情况下, COMBINING_SPACING_MARK (和相关的正则表达式\p{gc=Mc}
)都引用Unicode类别 “Mark,Spacing Combining”,它基本上是与前一个字符组合的任何字符,同时还增加了宽度。
其他可能有用的正则表达式: \p{M}
表示任何类型的标记 。 如果要使用Character getType()
常量,可以通过检查其类型是COMBINING_SPACING_MARK
还是ENCLOSING_MARK
或NON_SPACING_MARK
来获得相同的行为。
ENCLOSING_MARK是一个周围的角色,就像一个圆圈 – 也为它结合的角色增加了宽度。
NON_SPACING_MARK包括拉丁字母变音符号组合标记等(标记基本上位于顶部或下方,并且不向字符添加任何宽度)。
- Google Guice是否有效?
- 需要Lucene 4.1.0源码jars或javadoc jar(用于在Eclipse中使用Lucene 4.1.0进行开发)
- java如何解码获取url参数收到抛出BeanParam
- 在java的Annotation Processor中发现methodinvocation的类
- 何时使用EventListenerList而不是一般的侦听器集合
- 在XML标记之间提取内容
- 为什么使用Arial Unicode MS无法正确呈现Gujarati-Indian文本?
- java.nio选择器和SocketChannel用于继续流式传输
- 如何使用iText java读取PDF中的表格?