注意,是10位长度!试过用系统时间跟SessionID截取,但不能保证字串不重复!请高手指点指点!

解决方案 »

  1.   


      用时间取毫秒难道还不能达到你的需求?  
         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位的。
      

  2.   

    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
      

  3.   

    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这个循环次数多了还是会产生重复!还有别的方法没
      

  4.   

    要直接生成且不重,只有UUID类。
    如果能用Set作为辅助检查是否已经重复,重复了再生成一遍,这样就有很多方法了。
    (在apache commons lang里有一个RandomStringUtils可以生成指定长度随机字符串。)
      

  5.   

    RandomStringUtils 这个产生的字串是乱码,要把它转成什么编码类型?
      

  6.   

    我测试了应该没什么重复的。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;
    }}
      

  7.   


    RandomStringUtils.random(10, "abcd");
    以上面为例,就是产生10位随机字符串,字符串由abcd组成。
    即你想要随机字符串包含什么字符,可以写到第二个参数中,不需要什么编码解码
      

  8.   


    我在想,如果非要实现完全无重复的字符,可以考虑这个方法:
    int lastIndexOf(String str)
    在将一个随机产生的新字符添加到字符串上之前,用这个方法校验这个字符是否在现在的串中已经存在,只有在返回值为-1是才执行拼接,这样就可以保证生成的字符串是有完全不同的字符组成。