有关Character.isLetter()和Character.isLetterOrDigit()的坑与替代方案

  • Post author:
  • Post category:其他


在项目中有时候可能需要判断输入的是否全是英文或数字,如果你不善于使用正则,JDK中提供了

Character

类对字符进行操作,其中的

isLetter



isLetterOrDigit

方法貌似可以做到这一点。但是如果你试下下面的代码,你会失望的:

很不幸地,Java天生提供了对unicode的支持,因此在她眼里中文也是“letter”,所以上面打印出的是true……。替代方案是,使用

Apache Commons

子项目中的

lang

库,

CharUtils



isAsciiAlpha


(char)

,

isAsciiNumeric(char),




isAsciiAlphanumberic



(char)


等对字符进行字母,大小写字母,数字等进行判断

多说一句,commons项目是个大宝库,其中提供了大量对JDK的增强API,lang库就是对java.lang的增强,比如使用反射生成toString的

ToStringBuilder

,使用反射生成hashCode的

HashCodeBuilder

,使用反射生成equals的

EqualsBuilder

等等,大家可以慢慢自己发掘~




— EOF —