java 随机字符串生成

36位,a-z字符,要求至少跑一天不会有不重复。privatestaticchar[]str={'a','b','c','d','e','f','g','h','i','... 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就重复了
展开
 我来答
小傻

2015-11-14 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

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();
}
}

运行结果如下:

km1218
2012-07-22 · 超过18用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:38.1万
展开全部
你这里生成的字符串是通过随机获取26个下标,将其对应的字符并凑而成。在获取下标过程,未免会形成与之前的相同,这时,不应直接跳出,而是判断生成的字符串次是否达到26!个,若是,结束,否则,继续获取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yihuishuihua
2012-07-12 · TA获得超过186个赞
知道答主
回答量:99
采纳率:0%
帮助的人:49.2万
展开全部
亲,随机肯定会有重复的概率的。就好比重头彩一样,就一个人买了那个头奖号,虽然几率很小,但是也是有可能发生的。所以你可以丢进set判断是否重复,而SET是有容量大小的,不要把内存消耗完了。。。放弃这个念头吧。也有可能跑到第二个就重复的。 如果真需要,那么来个时间戳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2012-07-12 · TA获得超过751个赞
知道小有建树答主
回答量:376
采纳率:0%
帮助的人:360万
展开全部
呵呵 你干脆直接用UUID生成吧,
每秒产生10亿笔UUID,100年后只产生一次重复的机率是50%。如果地球上每个人都各有6亿笔UUID,发生一次重复的机率是50%
可想而知概率有多低,何必自己去生成这些呢
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SUKIYOU
2012-07-12 · TA获得超过995个赞
知道小有建树答主
回答量:1505
采纳率:0%
帮助的人:1229万
展开全部
一共有26的36次方个组合,跑一天怎么也跑完了吧,老爷机也能跑完
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式