随机验证码:Ramdom方法与StringBuilder方法的应用;正则表达式

 随机生成验证码:

需求:通过26个大小写字母以及0-9数字,随机生成四位
 * 1.构造数据:26个大小写字母以及0-9数字
 * 2.从以上数据中随机取四位
 *         0 1 2 3
 *  char[] a b c d //索引和元素是一一对应,索引随机也代表元素随机

import java.util.Random;

public class Randomdemo {
    public static void main(String[] args) {
        StringBuilder data = new StringBuilder();
        for (char ch = 'a'; ch <= 'z'; ch++) {
            data.append(ch);
        }
        for (char ch = 'A'; ch <= 'Z'; ch++) {
            data.append(ch);
        }
        for (int ch = 0; ch <= 9; ch++) {
            data.append(ch);
        }//将所有可能出现的值都放在data字符串中了

        random01(data);
        random02(data);

    }

    private static void random02(StringBuilder data) {
        char[] chars = data.toString().toCharArray();//String类中的方法 将字符串转换为字符数组输出
        StringBuilder randomCode = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int randomIndex = new Random().nextInt(chars.length);//在chars数组中随机选四个索引
            randomCode.append(chars[randomIndex]);
        }
        System.out.println(randomCode);
    }

    private static void random01(StringBuilder data) {
        String datastr= data.toString();//将StringBuider对象转为String
        StringBuilder randomCode = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int randomIndex = new Random().nextInt(datastr.length());
            randomCode.append(datastr.charAt(randomIndex));//用String中的chaAt()方法追加字符到验证码中
        }
        System.out.println(randomCode);
    }
}

关键语句解析:

1.char[] chars=data.toString().toCharArray();

  • StringBuilder 不是 String 类型

    • StringBuilder 是可变的字符序列,它是一个容器,用来动态地构建和修改字符串。它的内部是一个字符数组,可以进行拼接和修改,但它本身并不是一个 String,并没有 toCharArray() 方法。
  • toString() 方法的作用

    • StringBuilder 类有一个 toString() 方法,这个方法将 StringBuilder 中的字符序列转换为一个不可变的 String 对象。String 类是不可变的字符串类,拥有很多与字符串处理相关的方法,包括 toCharArray() 方法。
    • 通过调用 data.toString(),你得到了一个新的 String 对象,随后可以调用该 StringtoCharArray() 方法将其转换为字符数组。
  • toCharArray() 方法

    • toCharArray()String 类的一个方法,能够将一个 String 对象中的字符转换成字符数组(char[])。
    • 在这个代码中,调用 toString() 后,data 成为了一个 String 类型的对象,然后你就可以安全地调用 toCharArray() 来获取字符数组了。

2.这里 Random().nextInt()方法中的参数为什么是chars.length?

在这段代码中,Random().nextInt(chars.length) 方法的参数是 chars.length,这是因为 chars 是一个字符数组(char[]),nextInt() 方法的参数决定了随机数的生成范围。

详细解释:

  1. chars 数组

    • 这段代码中,chars 是通过 data.toString().toCharArray() 创建的字符数组。data 是一个 StringBuilder,它存储了从小写字母 'a' 到 'z'、大写字母 'A' 到 'Z'、以及数字 0 到 9 所有字符。
    • 因此,chars 数组的长度(即 chars.length)将是 26(小写字母) + 26(大写字母) + 10(数字) = 62。
  2. nextInt(chars.length)

    • Random().nextInt(n) 方法会返回一个从 0 到 n-1(包括 0,不包括 n)之间的随机整数。
    • 由于 chars 数组有 62 个字符(chars.length == 62),nextInt(chars.length) 会生成一个从 0 到 61 之间的随机整数。
  3. 目的

    • randomIndex 将会是一个随机整数,它代表了 chars 数组中一个随机位置的索引。
    • 接下来,你可以用这个 randomIndex 来从 chars 数组中选择一个随机字符。

即利用了选择随机索引实现生成范围类4个随机数的目的.

手机号匹配与模糊邮箱匹配

/**
 * 邮箱的模糊匹配
 * zhangsan@126.com
 * 23232323@qq.com
另一种:
String regex = "^[A-Za-z0-9+_.-]+@(.+)$"; 
 */
public class PhoneMail {
    public static void main(String[] args) {
        Method01();//w@w.w
        String regex = "\\w+@\\w+\\.\\w+";//\w:匹配一个字母、数字或下划线,等价于 [a-zA-Z0-9_]
        System.out.println("zhangsan@126.com".matches(regex));
        System.out.println("23232323@qq.com".matches(regex));
    }

    /*  手机号的规则:
     *   1.手机号的长度必须是11位
     *   2.手机号的第一位必须是1
     *   3.手机号的第二位:3或4或5或7或8
     *   4.手机号的后9位位数都必须是数字
     * */
    private static void Method01() {
        String regexStr = "1[34578]\\d{9}";
        System.out.println("13534931778".matches(regexStr));//true
        System.out.println("23534931778".matches(regexStr));//false
        System.out.println("2353493a778".matches(regexStr));//false
        System.out.println("----------");
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值