注意,是10位长度!试过用系统时间跟SessionID截取,但不能保证字串不重复!请高手指点指点!
解决方案 »
- struts2 页面用一个list迭代出来的内容中有textfield 提交到另一个action时,如何得到录入的内容?
- WebService的问题
- 问个JAVA问题,冒似有点难!(含代码)
- c3p0读取clob NewProxyResultSet错误
- jboss服务器报的错误,我没看懂,请问高手怎么解决啊[急啊]?
- 请教关于用JAXP创建XML文档的一个问题,有用过的兄弟进来看一下
- 页面跳转时,为了保存页面中的输入值,除了session和在url后面追加外,还有其他的方法么??
- junit方法的测试须序问题
- 利用weblogic workshop构建的webservice生成的*.jws文件跟一般的*.java webservice有什么异同?
- STRUTS登陆跳转的问题
- struts2标签中怎么用java表达式
- 雯字 乱码
用时间取毫秒难道还不能达到你的需求?
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位的。
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
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这个循环次数多了还是会产生重复!还有别的方法没
如果能用Set作为辅助检查是否已经重复,重复了再生成一遍,这样就有很多方法了。
(在apache commons lang里有一个RandomStringUtils可以生成指定长度随机字符串。)
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;
}}
RandomStringUtils.random(10, "abcd");
以上面为例,就是产生10位随机字符串,字符串由abcd组成。
即你想要随机字符串包含什么字符,可以写到第二个参数中,不需要什么编码解码
我在想,如果非要实现完全无重复的字符,可以考虑这个方法:
int lastIndexOf(String str)
在将一个随机产生的新字符添加到字符串上之前,用这个方法校验这个字符是否在现在的串中已经存在,只有在返回值为-1是才执行拼接,这样就可以保证生成的字符串是有完全不同的字符组成。