java 随机字符串生成

36位,a-z字符,要求至少跑一天不会有不重复。
private static char[] str = {'a','b','c','d','e','f','g',
'h','i','j','k','l','m','n',
'o','p','q','r','s','t','u',
'v','w','x','y','z'};
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Set<String> set = new HashSet<String>();
List<String> arr = new ArrayList<String>();
String fileName = "f:\\zyhxx"+".txt";
FileOutputStream fo=new FileOutputStream(fileName);
OutputStreamWriter ow=new OutputStreamWriter(fo,"gbk");
PrintWriter out=new PrintWriter(ow);
int num = 0;
while(true){
StringBuffer buff = new StringBuffer();
for(int i = 0; i < 36; i++){
int m = new Random().nextInt(26);
buff.append(str[m]);
}
String s = buff.toString();
System.out.println((num++)+"\t"+s);
if(arr.contains(s)){
System.out.println(arr.indexOf(s));
System.out.println(s);
break;
}
out.println(s);
arr.add(s);
}
out.close();
}
才100000就重复了

java生成随机字符串,主要是先建立一个26字符的字符串,然后使用random类来随机选择,拼接成一个新的字符串,如下代码:

package com.qiu.lin.he;

import java.util.Random;

public class Ceshi {
public static void main(String[] args) {
System.out.println(getRandomString(10));//调用随机生成字符串的方法,并打印出来
}

public static String getRandomString(int length) {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//含有字符和数字的字符串
Random random = new Random();//随机类初始化
StringBuffer sb = new StringBuffer();//StringBuffer类生成,为了拼接字符串

for (int i = 0; i < length; ++i) {
int number = random.nextInt(62);// [0,62)

sb.append(str.charAt(number));
}
return sb.toString();
}
}

运行结果如下:

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-22
你这里生成的字符串是通过随机获取26个下标,将其对应的字符并凑而成。在获取下标过程,未免会形成与之前的相同,这时,不应直接跳出,而是判断生成的字符串次是否达到26!个,若是,结束,否则,继续获取。
第2个回答  2012-07-12
亲,随机肯定会有重复的概率的。就好比重头彩一样,就一个人买了那个头奖号,虽然几率很小,但是也是有可能发生的。所以你可以丢进set判断是否重复,而SET是有容量大小的,不要把内存消耗完了。。。放弃这个念头吧。也有可能跑到第二个就重复的。 如果真需要,那么来个时间戳。
第3个回答  2012-07-12
呵呵 你干脆直接用UUID生成吧,
每秒产生10亿笔UUID,100年后只产生一次重复的机率是50%。如果地球上每个人都各有6亿笔UUID,发生一次重复的机率是50%
可想而知概率有多低,何必自己去生成这些呢本回答被提问者和网友采纳
第4个回答  2012-07-12
一共有26的36次方个组合,跑一天怎么也跑完了吧,老爷机也能跑完
相似回答