问题+代码:
创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
给点提示: 数字和字符之间可以通过互相转换
char c = ‘A’;
short s = (short) c;
通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了
需要用ASCII码对照表
package Fengzhaung;
//创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
//ASCII码对照表 https://how2j.cn/k/io/io-bytestream/340.html#step766
//数字,大写字母或者小写字母 范围:48~122 不包括58~64,91~96
import java.util.Random;
public class demoo {
public static void CreatString(int length){
String str="";
int num; //随机数
char c; //随机数转化的字符
Random random=new Random();
for (int i = 0; i <length ; i++) { // 往字符串 塞length个随机数
num=random.nextInt(75)+48; // 随机数范围:[48,122)
if ((num>=58 && num<=64)||(num>=91 && num<=96)){
i--; // int值 58~64,91~96 转化的char,不是数字或字母,
continue; // 所以重新随机
}
c=(char)num;//int 强转为char后
str=str+c; //加进字符串str里
}
System.out.println(str.toString()); // 打印随机字符串
}
public static void main(String[] args) {
demoo.CreatString(5); //生成随机字符 长度为5
}
}
注释:
num=random.nextInt(75)+48; // 随机数范围:[48,122)
由ASCII码表看
48前面的不是数字,字母,不要 122后面也是这样,先确定一个大致范围
for (int i = 0; i <length ; i++) { // 往字符串 塞length个随机数
num=random.nextInt(75)+48; // 随机数范围:[48,122)
if ((num>=58 && num<=64)||(num>=91 && num<=96)){
i--; // int值 58~64,91~96 转化的char,不是数字或字母,
continue; // 所以重新随机
}
if ((num>=58 && num<=64)||(num>=91 && num<=96)){
58到64不是数字和字母 ,91到96也是,所以continue跳过 i-- 不算一次循环