有關Character.isLetter()和Character.isLetterOrDigit()的坑與替代方案
阿新 • • 發佈:2019-01-23
在專案中有時候可能需要判斷輸入的是否全是英文或數字,如果你不善於使用正則,JDK中提供了Character類對字元進行操作,其中的 isLetter和isLetterOrDigit方法貌似可以做到這一點。但是如果你試下下面的程式碼,你會失望的:
1 | System.out.println(Character.isLetter('中')); |
很不幸地,Java天生提供了對unicode的支援,因此在她眼裡中文也是“letter”,所以上面打印出的是true……。替代方案是,使用Apache Commons子專案中的lang庫,CharUtils的isAsciiAlpha
多說一句,commons專案是個大寶庫,其中提供了大量對JDK的增強API,lang庫就是對java.lang的增強,比如使用反射生成toString的ToStringBuilder,使用反射生成hashCode的HashCodeBuilder,使用反射生成equals的EqualsBuilder等等,大家可以慢慢自己發掘~
— EOF —