在Java中,如何查找字符串中的第一个字符是否为大写字母而没有正则表达式

2022-08-31 13:46:21

在 Java 中,查找字符串中的第一个字符是否为大写,而不使用正则表达式。


答案 1

假设 为非空:s

Character.isUpperCase(s.charAt(0))

或者,正如divec所提到的,使其适用于具有上述代码点的字符:U+FFFF

Character.isUpperCase(s.codePointAt(0));

答案 2

实际上,这比看起来更微妙。

上面的代码会为代码点高于 U+FFFF 的小写字符(如 U+1D4C3,数学脚本小 N)给出不正确的答案。String.charAt 将返回 UTF-16 代理项对,该代理项对不是字符,而是字符的一半,可以这么说。因此,您必须使用 String.codePointAt,它在 0xFFFF(而不是 char)上方返回一个 int。你会做的:

Character.isUpperCase(s.codePointAt(0));

不要觉得难过忽略了这一点;几乎所有的Java程序员都对UTF-16处理得很糟糕,因为这个术语误导性地让你认为每个“char”值代表一个字符。UTF-16很糟糕,因为它几乎是固定的宽度,但并不完全是。因此,非固定宽度的边缘情况往往不会经过测试。直到有一天,一些文档包含像U + 1D4C3这样的字符,你的整个系统就会爆炸。