1.要随机生成字符串和数字,先得到一个有这两个数据的范围数组
2.随机获取下标来从数组中得到字符
3.不能重复,我们用set
4.一个用来存一条字符串,一个用来存多条字符串
5.set1存到想要的长度后,变成一条字符串,然后存入set2
6.最后把多条字符串的set2变为数组,返回结果
public class suijisuzu {
public static void main(String[] args) {
suijisuzu a=new suijisuzu();
String[] A=a.shuzu(5,10);
System.out.println(Arrays.toString(A));
}
//获取一个有全部字母和数字的数组
public ArrayList fanwei() {
ArrayList a = new ArrayList();
for (char i = 'a'; i <= 'z'; i++) {
a.add(i);
}
for (char i = 'A'; i <= 'Z'; i++) {
a.add(i);
}
for (char i = '1'; i <= '9'; i++) {
a.add(i);
}
;
return a;
}
public String[] shuzu(int count, int Str_length) {
//获取随机生成字符范围数组
ArrayList<String> a = fanwei();
//创建两个防止重复的集合set,一个用来放一条字符串,一个用来放多条
HashSet s1 = new HashSet();
HashSet s2 = new HashSet();
//进入循环来获取
while (true) {
//s2大小是否达到了想要的数组数目
if (s2.size() == count) {
break;
}
//获取范围下标
int e = (int) (Math.random() * a.size());
//存入s1
s1.add(a.get(e));
//s1是否达到了想要的字符串长度
if (s1.size()==Str_length){
//把s1数组变成一条字符串
StringBuilder l=new StringBuilder();
for (Object o:s1) {
l.append(o.toString());
}
//放入s2中
s2.add(l);
//s1清空
s1=new HashSet();
}
}
//set无序,无法一个一个读取放入数组,set先放入list集合,再读取list集合放入数组(应该有更好的方法各位读者自行去解决)
List<String> qq=new ArrayList<>();
for (Object str: s2) {
qq.add(str.toString());
}
String[] s = new String[count];
for (int i=0;i<s.length;i++){
s[i]=qq.get(i);
}
//最后返回字符串数组
return s;
}
}
结果
[EeUi9YjzKl, rSDvfVhmnN, Pa1rc3e8XL, Pa1C34Hyjo, rs4EGwyZlo]
Process finished with exit code 0