import java.util.Random;
/**
* @author lishengchen
* @version 1.0
* @Date 2020/11/26
*/
public class Test5 {
public static void main(String[] args) {
/**
* 生成6位的短信验证码
* 那种效率高
*/
int sum = 1000000;
//方案一 通过随机数--->字符串,然后截取的方式
long start = System.currentTimeMillis();
// int count = 0;
for (int i = 0; i < sum; i++) {
String code = (Math.random() + "").substring(2, 8);
// if(code.startsWith("0")){
// count++;
// }
}
// System.out.println("startsWith0 count:"+count);
long end = System.currentTimeMillis();
System.out.println("方案一"+(end - start));
//方案二 通过int类型直接组装然后转成字符串
long start2 = System.currentTimeMillis();
for (int i = 0; i < sum; i++) {
String code = String.valueOf((int)((Math.random()*9+1)*Math.pow(10,5)));
/*if(code.startsWith("0")){
System.out.println(code);
}*/
}
long end2 = System.currentTimeMillis();
System.out.println("方案二"+(end2 - start2));
//方案三
long start3 = System.currentTimeMillis();
for (int i = 0; i < sum; i++) {
String code = String.valueOf(new Random().nextInt(900000) + 100000);
/*if (code.startsWith("0"))
System.out.println(code);*/
}
long end3 = System.currentTimeMillis();
System.out.println("方案三"+(end3 - start3));
}
}
结论:方案一是 通过随机数—>字符串,然后通过字符串的截取方式,而方案二和方案三都是直接操作基本数据类型,最后转成字符串的,所以方案二和方案三效率更优,但是通过方案一是可以生产0开头的6位纯数字验证码,而方案二三都没有以0开头的,在没有特殊要求的情况下方案二三是可以用的,效率是方案一的5-10倍左右;