-------------------------------------------背景(着急看解决方案的翻到“解决方案”)------------------------------
今天是学习JAVASE的第13天,在做包装类的习题时遇到了这么一个题
完成用户注册时的姓名和密码校验工作。
要求姓名必须全是英文字母组成。
密码中必须包含数字、大写字母和小写字母。
---------------------------------------------------------------过程-----------------------------------------------------------
我心想,这还不简单,账号的校验通过toCharArray()方法将输入的账号变成字符数组,然后遍历每个字符,用isLetter()方法判断不就好了吗。说干就干:
Scanner sc = new Scanner(System.in);
boolean ifOk = false;
while (!ifOk) {
System.out.println("输入姓名");
String name = sc.next();
char[] chars = name.toCharArray();
for ( int i =0;i<chars.length;i++) {
if (Character.isLetter(chars[i])) {
//如果是字母,就把ifOk变成true,后面如果还是字母,ifOk仍然是ture。除非出现非字母。
ifOk = true;
} else {
//如果不是字母,把ifOk变回false,注意,是变回!然后结束内循环(也就是外循环)
System.out.println("姓名格式错误,请重新输入");
ifOk=false;
break;
}
}
}
写完了,立马去运行,输入英文和数字时程序还乖乖地运行,直到我输入了汉字...........
本以为会重复让我输入名字,结果程序循环居然结束了!这令我大吃一惊。
-------------------------------------------------------------解决过程--------------------------------------------------------
查阅资料后发现,Java从出生就支持对Unicode编码方式的支持,每个中文在Unicode表里都有自己对应的码,所以中文在JAVA眼里是一个Letter...........
补:Unicode 出现的目的很简单——将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码。呵呵,聪明(不是)的漂亮国
-------------------------------------------------------------解决方案-------------------------------------------------------
解决方法很简单啊
要么用isLowerCase()配合isUpperCase()使用,要么就老老实实地用ASCII码进行大小比较吧。
-----------------------------------------------------------本期问题答案----------------------------------------------------
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean ifOk = false;
while (!ifOk) {
System.out.println("输入姓名");
String name = sc.next();
char[] chars = name.toCharArray();
for (int i =0;i<chars.length;i++) {
if ( Character.isUpperCase(chars[i])||Character.isLowerCase(chars[i])) {
//如果是字母,就把ifOk变成true,后面如果还是字母,ifOk仍然是ture。除非出现非字母。
ifOk = true;
} else {
//如果不是字母,把ifOk变回false,注意,是变回!然后结束内循环(也就是外循环)
System.out.println("姓名格式错误,请重新输入");
ifOk=false;
break;
}
}
}
ifOk = false;
while (!ifOk) {
System.out.println("请输入密码:");
String password = sc.next();
char[] chars= password.toCharArray();
boolean ifLowerCase = false;
boolean ifDigit = false;
boolean ifUpperCase = false;
for (int i = 0; i < chars.length; i++) {
if(Character.isDigit(chars[i])){ifDigit=true;}
if(Character.isUpperCase(chars[i])){ifUpperCase=true;}
if(Character.isLowerCase(chars[i])){ifLowerCase=true;}
}
ifOk = ifDigit&&ifLowerCase&&ifUpperCase;
if(!ifOk){
System.out.println("密码格式不正确,请重新输入");
}
}
System.out.println("注册成功!");
}
-------------------------------------------------------------最后-------------------------------------------------------------
这是我第一次发文章,有不对的地方大家见谅,有错误欢迎批评指正,大家一起进步鸭!