正则表达式练习

编写程序,循环提示用户输入用户名并接收用户名,校验用户名是否满足以下规则:
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("格式错误!");
}
}
    }
}

你可能感兴趣的:(正则表达式,java,开发语言)