• 正则表达式练习


    编写程序,循环提示用户输入用户名并接收用户名,校验用户名是否满足以下规则:
    1. 用户名只能由字母、数字组成(可以不包含数字)
    2. 用户名不能以数字开头
    3. 用户名长度必须在6-12位之间

    如果输入886,则终止循环。

    答案:

    1. import java.util.Scanner;
    2. public class homework0502 {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. while(true){
    6. System.out.println("请输入您的用户名");
    7. String name = sc.nextLine();
    8. if(name.equals("886")){
    9. break;}
    10. boolean b = !name.matches(".*[^a-zA-Z0-9]+.*");//".*"表示零个或多个任意字符。
    11. boolean c = name.matches("^[A-Za-z]+.*");
    12. boolean d = name.length() >= 6 && name.length() <= 12;
    13. if(b&c&d){
    14. System.out.println("格式正确");
    15. return;
    16. }else{
    17. System.out.println("格式错误!");
    18. }
    19. }
    20. }
    21. }

    对其中一些代码进行的知识注解:

    1. if(name.equals("886")){
    2. 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]+.*` 表示字符串必须以字母开头。

    需要注意的是,在方括号中使用 `^` 符号时,它的作用是求补,而在正则表达式的开始位置使用 `^` 符号时,它的作用是锚定字符串的开头。两种情况下的 `^` 符号具有不同的含义和作用。

    1. boolean d = name.length() >= 6 && name.length() <= 12;
    2. if(b&c&d){
    3. System.out.println("格式正确");
    4. return;
    5. }else{
    6. System.out.println("格式错误!");
    7. }
    8. }
    9. }
    10. }

  • 相关阅读:
    MySQL学习(八)——锁
    第1章 Spring Boot到底是什么?
    如何安全地访问互联网
    “华为杯”第十六届中国研究生数学建模竞赛-C题:视觉情报信息分析
    JS:给数字添加千分位符(每3位数用逗号隔开)
    Laf v1.0 发布:函数计算只有两种,30s 放弃的和 30s 上线的
    Android 组件化 组件上下依赖关系实现
    Google Chrome 浏览器 119.0.6045.106 版本提示 STATUS_INVALID_IMAGE_HASH 崩溃
    【Linux】第十八站:进程等待
    网工内推 | 国企、上市公司,IA/IP认证即可,有年终、绩效
  • 原文地址:https://blog.csdn.net/m0_71469414/article/details/131113168