如何在JAVA中随机产生10位不可重复字串的方法!

wenxichao1 2009-12-01 07:31:56
注意,是10位长度!试过用系统时间跟SessionID截取,但不能保证字串不重复!请高手指点指点!
...全文
4548 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
buqitianxie 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 closewbq 的回复:]
我测试了应该没什么重复的。
Java code
mport java.util.Random;publicclass A {publicstaticvoid main(String args[]){for(int i=0;i<100;i++){
System.out.println(GetRandomString(10));
}
}publicstatic String GetRandomString(int Len) {

String[] baseString={"0","1","2","3","4","5","6","7","8","9","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","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"};
Random random=new Random();int length=baseString.length;
String randomString="";for(int i=0;i<length;i++){
randomString+=baseString[random.nextInt(length)];
}
random=new Random(System.currentTimeMillis());
String resultStr="";for (int i=0; i< Len; i++) {
resultStr+= randomString.charAt(random.nextInt(randomString.length()-1));
}return resultStr;
}

}
[/Quote]

我在想,如果非要实现完全无重复的字符,可以考虑这个方法:
int lastIndexOf(String str)
在将一个随机产生的新字符添加到字符串上之前,用这个方法校验这个字符是否在现在的串中已经存在,只有在返回值为-1是才执行拼接,这样就可以保证生成的字符串是有完全不同的字符组成。
墨水鱼 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wenxichao1 的回复:]
RandomStringUtils 这个产生的字串是乱码,要把它转成什么编码类型?
[/Quote]

RandomStringUtils.random(10, "abcd");
以上面为例,就是产生10位随机字符串,字符串由abcd组成。
即你想要随机字符串包含什么字符,可以写到第二个参数中,不需要什么编码解码
closewbq 2009-12-01
  • 打赏
  • 举报
回复
我测试了应该没什么重复的。

mport java.util.Random;
public class A {
public static void main(String args[]){
for(int i=0;i<100;i++){
System.out.println(GetRandomString(10));
}
}

public static String GetRandomString(int Len) {

String[] baseString={"0","1","2","3",
"4","5","6","7","8","9",
"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","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"};
Random random = new Random();
int length=baseString.length;
String randomString="";
for(int i=0;i<length;i++){
randomString+=baseString[random.nextInt(length)];
}
random = new Random(System.currentTimeMillis());
String resultStr="";
for (int i = 0; i < Len; i++) {
resultStr += randomString.charAt(random.nextInt(randomString.length()-1));
}
return resultStr;
}

}

wenxichao1 2009-12-01
  • 打赏
  • 举报
回复
RandomStringUtils 这个产生的字串是乱码,要把它转成什么编码类型?
墨水鱼 2009-12-01
  • 打赏
  • 举报
回复
要直接生成且不重,只有UUID类。
如果能用Set作为辅助检查是否已经重复,重复了再生成一遍,这样就有很多方法了。
(在apache commons lang里有一个RandomStringUtils可以生成指定长度随机字符串。)
xiaowangyao 2009-12-01
  • 打赏
  • 举报
回复
有个思路就是说先通过随机函数得到一组符合你想要的字符串.如果其中包含重复字符,那么就任意的冒泡算法把这个重复的字符排除掉.希望能给你点友情提示
wenxichao1 2009-12-01
  • 打赏
  • 举报
回复
package pack;

import java.util.HashSet;
import java.util.Random;

public class TestRandom {
public static Random r = new Random();

public static String getRandom(){
long num = Math.abs(r.nextLong() % 10000000000L);
String s = String.valueOf(num);
for(int i = 0; i < 10-s.length(); i++){
s = "0" + s;
}

return s;
}

public static void main(String[] args) {
HashSet set=new HashSet();
for(long i = 0; i < 100000; i++){
String str=getRandom();
set.add(str);

}
for(long i = 0; i < 100000; i++){
String str=getRandom();
set.add(str);

}
for(long i = 0; i < 100000; i++){
String str=getRandom();
set.add(str);

}
for(long i = 0; i < 100000; i++){
String str=getRandom();
set.add(str);

}
System.out.println(set.size());
}
}

结果599983

这个循环次数多了还是会产生重复!还有别的方法没
烟雨鹏城 2009-12-01
  • 打赏
  • 举报
回复
UUID截取
sunnylyy 2009-12-01
  • 打赏
  • 举报
回复
import java.util.Random;

public class TestRandom {
public static Random r = new Random();

public static String getRandom(){
long num = Math.abs(r.nextLong() % 10000000000L);
String s = String.valueOf(num);
for(int i = 0; i < 10-s.length(); i++){
s = "0" + s;
}

return s;
}

public static void main(String[] args) {
for(int i = 0; i < 10; i++){
System.out.println(getRandom());
}
}
}


结果:
1311368955
8862432610
8165454199
6728821648
0213839374
4422278610
4566304477
6341349613
5823971037
4070959361
pig_learner 2009-12-01
  • 打赏
  • 举报
回复

用时间取毫秒难道还不能达到你的需求?


org.apache.commons.id.Hex;

/**
* @return String 生成32位的随机数作为id
*/
public static String getCode() {
String s = null;
try {
s = new String(Hex.encodeHex(UUID.randomUUID().getRawBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return s;
}


用这个就永远不会出现相同的ID的。不过是32位的。
qq920999942 2009-12-01
  • 打赏
  • 举报
回复
这个问题!!!不是很了解
可以用IF判断不?
或者比较然后再从新输出

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧