随机生成验证码:
需求:通过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对象,随后可以调用该String的toCharArray()方法将其转换为字符数组。
-
toCharArray()方法:toCharArray()是String类的一个方法,能够将一个String对象中的字符转换成字符数组(char[])。- 在这个代码中,调用
toString()后,data成为了一个String类型的对象,然后你就可以安全地调用toCharArray()来获取字符数组了。
2.这里 Random().nextInt()方法中的参数为什么是chars.length?
在这段代码中,Random().nextInt(chars.length) 方法的参数是 chars.length,这是因为 chars 是一个字符数组(char[]),nextInt() 方法的参数决定了随机数的生成范围。
详细解释:
-
chars数组:- 这段代码中,
chars是通过data.toString().toCharArray()创建的字符数组。data是一个StringBuilder,它存储了从小写字母 'a' 到 'z'、大写字母 'A' 到 'Z'、以及数字 0 到 9 所有字符。 - 因此,
chars数组的长度(即chars.length)将是 26(小写字母) + 26(大写字母) + 10(数字) = 62。
- 这段代码中,
-
nextInt(chars.length):Random().nextInt(n)方法会返回一个从 0 到n-1(包括 0,不包括 n)之间的随机整数。- 由于
chars数组有 62 个字符(chars.length == 62),nextInt(chars.length)会生成一个从 0 到 61 之间的随机整数。
-
目的:
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("----------");
}
}
929

被折叠的 条评论
为什么被折叠?



