1. 程式人生 > >有關Character.isLetter()和Character.isLetterOrDigit()的坑與替代方案

有關Character.isLetter()和Character.isLetterOrDigit()的坑與替代方案

在專案中有時候可能需要判斷輸入的是否全是英文或數字,如果你不善於使用正則,JDK中提供了Character類對字元進行操作,其中的 isLetterisLetterOrDigit方法貌似可以做到這一點。但是如果你試下下面的程式碼,你會失望的:

1 System.out.println(Character.isLetter('中'));

很不幸地,Java天生提供了對unicode的支援,因此在她眼裡中文也是“letter”,所以上面打印出的是true……。替代方案是,使用Apache Commons子專案中的lang庫,CharUtilsisAsciiAlpha

(char),isAsciiNumeric(char),isAsciiAlphanumberic(char)等對字元進行字母,大小寫字母,數字等進行判斷

多說一句,commons專案是個大寶庫,其中提供了大量對JDK的增強API,lang庫就是對java.lang的增強,比如使用反射生成toString的ToStringBuilder,使用反射生成hashCode的HashCodeBuilder,使用反射生成equals的EqualsBuilder等等,大家可以慢慢自己發掘~


— EOF —