最近做一个小小的项目,有输入用户名一项,要求只能输入字母和数字。
即在用户输入用户名后,要做一个关于用户名的合法判断:只包含字母和数字。
一开始以为这个超级简单啊,想都没想就直接使用了Java API中Character的isLetterOrDigit方法。以为什么问题都没有。
使用的是Character.isLetterOrDigit方法:
private boolean isLetterOrNumber(String string) {
boolean flag = false;
for (int i = 0; i < string.length(); i++) {
if (Character.isLetterOrDigit(string.charAt(i))) {
flag = true;
} else {
flag = false;
return flag;
}
}
return flag;
}
结果发现输入中文字符的时候,也返回时true。例如,输入"惊呆了",返回true。
在进行追踪时,得到string.charAt(0) = 惊 ;然后在isLetterOrDigit中返回时,为true。
由于之前没有了解过,一下就呆住了。
后面了解到,由于Java提供了对Unicode的支持,因此中文也是Letter。
所以,使用Character.isLetter和Character.isLetterOrDigit方法的要注意啦,一不小心就掉进陷阱啦。
最后改为判断字符串中是否只含有大写字母小写字母和数字,解决问题。
private boolean isLetterOrDigits(String string) {
boolean flag = false;
for (int i = 0; i < string.length(); i++) {
if (Character.isLowerCase(string.charAt(i))
|| Character.isUpperCase(string.charAt(i))
|| Character.isDigit(string.charAt(i))) {
flag = true;
} else {
flag = false;
return flag;
}
}
return flag;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)