编写程序,循环提示用户输入用户名并接收用户名,校验用户名是否满足以下规则:
1. 用户名只能由字母、数字组成(可以不包含数字)
2. 用户名不能以数字开头
3. 用户名长度必须在6-12位之间
如果输入886,则终止循环。
答案:
import java.util.Scanner;
public class homework0502 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入您的用户名");
String name = sc.nextLine();
if(name.equals("886")){
break;}
boolean b = !name.matches(".*[^a-zA-Z0-9]+.*");//".*"表示零个或多个任意字符。
boolean c = name.matches("^[A-Za-z]+.*");
boolean d = name.length() >= 6 && name.length() <= 12;
if(b&c&d){
System.out.println("格式正确");
return;
}else{
System.out.println("格式错误!");
}
}
}
}
对其中一些代码进行的知识注解:
if(name.equals("886")){
break;}
在Java中,判断两个字符串是否相等需要使用equals()
方法,而不是赋值运算符=
。因此,如果您写成if(name="886")
,实际上是将字符串"886"赋值给了变量name,而不是将name与"886"进行比较。这样的语句会导致编译错误。正确的写法应该是if(name.equals("886"))
,其中equals()
方法用于比较两个字符串是否相等。
boolean b = !name.matches(".*[^a-zA-Z0-9]+.*");
当我们使用 `[^a-zA-Z0-9]` 这个字符集时,它会匹配任意一个不是字母和数字的字符。在这里,我们使用 `^` 符号表示反向选择,在 `[^a-zA-Z0-9]` 表示选择除了字母和数字之外的所有字符。
正则表达式中括号 `[ ]` 表示字符集合,加上 `^` 符号表示求补,即不匹配字符集合中的字符。所以这个正则表达式可以匹配不包含字母和数字的字符。
"." 表示匹配任意字符,"*" 表示匹配前面的字符零次或多次。因此,正则表达式 `".*[^a-zA-Z0-9]+.*"` 的含义是:
- 首先,匹配任意数量的字符,这些字符可能是字母、数字或者别的符号。" . " 表示匹配任意字符," *" 表示匹配0个或多个前面的字符,就是匹配任意数量的字符。
- 接着,通过 `[^a-zA-Z0-9]+` 匹配一个或多个不是字母和数字的字符。
- 最后,使用 `.*` 匹配剩余的任意数量的字符。
综上所述,这个正则表达式用于验证用户名只由字母和数字组成(可以不包含数字)。如果字符串中只包含字母和数字,则返回 true;反之则返回 false。
boolean c = name.matches("^[A-Za-z]+.*");
在正则表达式 `[A-Za-z]+.*` 中,`.*` 表示匹配零个或多个任意字符(除了换行符),这个表示是用来匹配用户名中除了首字母外的任意字符的部分。
正则表达式 `[A-Za-z]+` 表示匹配一个或多个字母,其中 `[A-Za-z]` 表示匹配任意一个英文字母,`+` 表示匹配前面的表达式一次或者多次,所以整个正则表达式 `[A-Za-z]+` 可以匹配用户名中必须以字母开头的情况。
而 `.*` 则表示在满足第一个条件即以字母开头后,匹配用户名中除了首字母外的任意字符的部分可以有零个或多个。因为这里的 `.*` 不加限制地匹配任意字符,所以可以匹配掉用户名中除了首字母外的所有字符。
如果用户名以字母开头,那么正则表达式匹配成功,返回 true;否则匹配失败,返回 false。
如果 `^` 符号在方括号内部使用,则表示字符集合中不包含该字符。例如,正则表达式 `[^A-Za-z]+.*` 表示匹配一个以非字母开头的字符串,其中 `[^A-Za-z]` 表示不匹配任何一个字母。
与此类似,还可以使用 `^` 符号作为整个正则表达式的开始,表示字符串必须以该表达式的模式开始,例如:`^[A-Za-z]+.*` 表示字符串必须以字母开头。
需要注意的是,在方括号中使用 `^` 符号时,它的作用是求补,而在正则表达式的开始位置使用 `^` 符号时,它的作用是锚定字符串的开头。两种情况下的 `^` 符号具有不同的含义和作用。
boolean d = name.length() >= 6 && name.length() <= 12;
if(b&c&d){
System.out.println("格式正确");
return;
}else{
System.out.println("格式错误!");
}
}
}
}