上面的代码对于代码点在 U + FFFF 之上的小写字符(例如 U + 1 D4C3,MATHEMATICAL SCRIPT SMALL N)给出了不正确的答案。CharAt 将返回一个 UTF-16代理对,可以说,它不是一个字符,而是字符的一半。因此必须使用 String.codePointAt,它返回0xFFFF 之上的 int (而不是 char)。你可以这么做:
IsUpperCase (s.codePointAt (0)) ;
不要因为忽略了这一点而感到不安; 几乎所有的 Java 编码器都不能很好地处理 UTF-16,因为术语误导性地让您认为每个“ char”值代表一个字符。UTF-16糟透了,因为它几乎是固定宽度,但不完全。因此,非固定宽度的边缘情况往往得不到测试。直到有一天,一些包含 U + 1 D4C3这样的字符的文档出现,您的整个系统就会崩溃。
确保您首先检查 null 和 null,然后 ten 将现有字符串转换为 Upper。如果想要看到输出,使用标准操作规程,否则就像 Rabiz 一样使用布尔值。
public static void main(String[] args)
{
System.out.println("Enter name");
Scanner kb = new Scanner (System.in);
String text = kb.next();
if ( null == text || text.isEmpty())
{
System.out.println("Text empty");
}
else if (text.charAt(0) == (text.toUpperCase().charAt(0)))
{
System.out.println("First letter in word "+ text + " is upper case");
}
}