跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Character.getType判断变量字符的Unicode分类

Character.getType() 返回 Unicode 字符的整数分类码,如 UPPERCASE_LETTER(1)、DECIMAL_DIGIT_NUMBER(9)等;支持 char 和 int codePoint 两种重载,后者兼容增补字符;需配合常量比对使用,不可直接用返回值判断非法字符。 Character.getType() 是 Java 中判断单个字符在 Unicode 标准中所属“通用类别”(General Category)的核心方法。它不返回字符串描述,而是返回一个 int 类型的分类码 ,对应 Character 类中定义的静态常量(如
UPPERCASE_LETTER
、
DECIMAL_DIGIT_NUMBER
等),是底层字符语义识别的基础。 怎么用 getType() 获取字符分类 该方法有两个重载版本:
Character.getType(char ch)
:仅支持基本多文种平面(BMP)字符,即 code point ≤ 0xFFFF 的字符;
Character.getType(int codePoint)
:支持全部 Unicode 字符(包括增补字符,如 emoji、古文字等),推荐在处理不确定来源的文本时使用。 例如:
System.out.println(Character.getType('A')); // 输出 1 → 对应 UPPERCASE_LETTER
System.out.println(Character.getType('①')); // 输出 9 → 对应 OTHER_NUMBER
System.out.println(Character.getType(0x1F60A)); // 输出 27 → 对应 EMOJI_MODIFIER_BASE(? 所属类别)
常见分类常量与实际含义 返回值需与 Character 类中的常量比对才有意义。关键分类包括:
UPPERCASE_LETTER
(1):如 'A'、'Ä'、'Λ';
LOWERCASE_LETTER
(2):如 'a'、'ñ'、'μ';
TITLECASE_LETTER
(3):较少见,如某些语言中词首大写变体;
DECIMAL_DIGIT_NUMBER
(9):ASCII 数字 '0'–'9',也包括全角数字 '0'–'9'(U+FF10–U+FF19);
OTHER_NUMBER
(10):带圈数字 '①'、罗马数字 'Ⅴ'、上标 '⁴' 等;
CONNECTOR_PUNCTUATION
(23):如下划线 '_'、连接号 '‑'(U+2011)、水平制表符不在此列;
SPACE_SEPARATOR
(12):标准空格 ' '、不换行空格 ' '(U+00A0)等;
UNASSIGNED
(0):Unicode 中尚未分配的码位, 注意:不是“无效字符” ,只是暂未定义。 getType() 和 isXxx() 方法的关系 多数
Character.isXxx()
工具方法内部都基于
getType()
实现。例如:
isDigit(ch)
≡
getType(ch) == DECIMAL_DIGIT_NUMBER
;
isLetter(ch)
≡ 类型为
UPPERCASE_LETTER
/
LOWERCASE_LETTER
/
TITLECASE_LETTER
/
MODIFIER_LETTER
/
OTHER_LETTER
之一;
isDefined(ch)
就是判断
getType(ch) != UNASSIGNED
; 但
isAlphabetic(ch)
比
isLetter(ch)
更宽泛——还包含
LETTER_NUMBER
(如 'Ⅰ'),而后者 getType 返回的是 11,不是 letter 类型。 注意事项与典型误用 使用
getType()
时容易忽略的细节: 传入
char
类型无法正确识别代理对(surrogate pair)表示的增补字符,必须用
int codePoint
形式; 返回值是整数,不能直接打印为可读名称,需配合 switch 或查表映射(如
switch (Character.getType(c)) { case UPPERCASE_LETTER: ... }
); 不要用
== 0
判断“非法字符”——
isValidCodePoint()
才管范围有效性,
getType()
为 0 表示“未分配”,仍可能是合法码点; 中文标点、日文平假名、阿拉伯数字等均各有明确分类,不是笼统的 “other” —— 全角 '。' 属于
OTHER_PUNCTUATION
(24),平假名 'あ' 属于
LOWERCASE_LETTER
(2)。

相关文章