一、随机数Random
1.Math.Random
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。不包含1.0。[0,1);
public static voidmain(String[] args) {//生成伪随机数
System.out.println(Math.random());
}
运行结果为:
2.Random类
此类的实例用于生成伪随机数流。
构造方法摘要
使用单个 long 种子创建一个新的随机数生成器。
什么是伪随机数呢?我们来看一个例子
r1和r2生成的随机数竟然是一样的!这是为什么呢?
这就是伪字的真谛,即通过相同的种子生成的随机数是一样的
方法摘要
protected int
生成下一个伪随机数。
boolean
boolean 值。
void
生成随机字节并将其置于用户提供的 byte 数组中。
double
0.0 和 1.0
之间均匀分布的 double 值。
float
0.0 和 1.0
之间均匀分布的 float 值。
double
double 值,其平均值是
0.0,标准差是 1.0。
int
int 值。
int
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int
值。
long
long 值。
void
使用单个 long 种子设置此随机数生成器的种子。
3.ThreadLocalRandom类
是java7新增类,random类的子类,在多线程并发情况下相对于random可以减少多线程资源竞争,保证了线程安全问题。
ThreadLocalRandom不是直接用new实例化,而是第一次使用其静态方法current()。
4.UUID类
通用唯一识别: 在一台机器上生成的数字,它保证对在同一时空中 的所有机器都是唯一的。
* UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡, 当地时间、一个随机数来生成UUID。
案例:生成验证码
importjava.util.Random;importjava.util.UUID;public classyanzhengma {public static voidmain(String[] args) {//生成一个5位数的随机数//截取UUID生成字符串的前五位
String Num=UUID.randomUUID().toString().substring(0, 5);
System.out.println(Num);//第二种方式
String str="ABCDEFGHYJKLMNOPQISTUVWXYZ";
str+=str.toLowerCase();
str+="0123456789";//将大小写字母和数字拼接起来
StringBuilder sb=new StringBuilder(5);for(int i=0;i<5;i++) {//每次随机在这个拼接好的字符串中随机取出一个字符
char ch=str.charAt(new Random().nextInt(str.length()));//index必须在[0,str.lenth()]之间//用StringBuilder进行拼接
sb.append(ch);
}
System.out.println(sb);
}
}
二、正则表达式
* 主要用于(匹配判断,分割操作,替换操作),最多的是匹配判断
来看一个案例:
判断一个字符串全部由数字组成
public classRegex {public static voidmain(String[] args) {
String input="1235sa65";boolean ok=isNumber(input);
System.out.println(ok);
}//判断一个字符串全部由数字组成
private static booleanisNumber(String str) {char[] arr=str.toCharArray();for(charc:arr) {if(c'9') {return false;
}
}return true;
}
}
是不是有些麻烦?
下边用正则表达式
public classRegex {public static voidmain(String[] args) {
String input="1235sa65";
System.out.println("123sa456".matches("\\d*"));
}
}
两个的结果是一样的,用正则表达式简化了代码,更优化了。
下边我们看看Pattern类中的方法
方法摘要
String regex,
int flags)
将给定的正则表达式编译到具有给定标志的模式中。
int
static boolean
static String
String 的字面值模式 String。
CharSequence input,
int limit)
围绕此模式的匹配拆分给定输入序列。
常用matches和split还有toString还有一个replace和replaceAll
一个案例来搞懂,判断手机号码
1:要求为11位数字
2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
结果为:true
再来一个替换的案例
把文字中的数字替换成*