创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
给点提示: 数字和字符之间可以通过互相转换
char c = ‘A’;
short s = (short) c;
通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了
需要用到ASCII码对照表
答案:
package character;
public class TestString {
public static void main(String[] args) {
//方法1:-缩小范围判断赋值法
char cs[]=new char[5];
short start = '0';//Ac码表字符0起始值(自动转换成对应int值)
short end='z'+1;//Ac码表字符z结束值
for(int i =0;i<cs.length;i++){//遍历数组长度
while (true) {
/*
* 注意:这里必须要加上while无限循环,因为
* 因为你不加while 有可能获取到的是一个特殊符号 比如 * _等等的,
* 但是需要的是字符或者是数字,不是这两个就循环生成,如果是就跳出循环,
* 你外循环是5次 对不对,如果你不写循环,那如果5次都是特殊字符,
* 最终循环完毕 是不是你的数组还是空 根本就没有赋值,分清楚,while(){}是循环语句,
* 而if(){}是判断语句,break在当前循环中跳出重新开始执行for语句
*
*/
/* 缩小随机范围:
起始值加上0-1随机数*剩下的取值范围=起始值开始到取值末端的一个随机数。
因为随机数取整后,小数点后部分会丢失,
最小随机永远是0,最大随机永远取不到设定的范围末端,左闭右开
所以要想取到随机数包含最后一位,必须+1 */
char c= (char)((Math.random()*(end-start))+start);
//判断随机字符中 字母或者数字可以进入
if(Character.isDigit(c)||Character.isLetter(c)){
cs[i]=c;//把符合条件的随机字符放入每一个元素
break;//每赋值一个元素,就跳出这个内层循环,进入外层循环
}
}
}
System.out.println(cs);
//方法二:确定字符随机赋值法
String pool="";
//设计一个空字符串用来拼接
//把所有符合要求的字符全部拼接在一起
for(int i ='0';i<='9';i++){
pool+=(char)i;
}
for(int i ='a';i<='z';i++){
pool+=(char)i;
}
for(int i ='A';i<='Z';i++){
pool+=(char)i;
}
//创建长度为5的字符数组
char[]cs=new char[5];
for(int i =0;i<cs.length;i++){
//把字符串的长度用随机数表现出来,作为下标(索引)
int index = (int)(Math.random()*(pool.length()));
//把字符串随机下标的一个字符放入每一个数组元素
cs[i]=pool.charAt(index);
}
String str = String.valueOf(cs); //把字符数组转换成字符串
System.out.println(cs);
}
}