ASCII编码,数字随机,然后....

解决方案 »

  1.   

    String s;
    for (int i=0;i<6;i++){
       char a = (char)random.nextInt(127)
       s = s+a;
    }
      

  2.   

    只含大小写字母及数字,随机串中无重复字符,用getString(6);进行调用。
    static long seed = System.currentTimeMillis();
    static long skip = Long.parseLong("187649984473770");
    static char ch[]={'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',}; public static String getString(int length){
    if(length>62 || length<=0){
    throw new IllegalArgumentException();
    }else if(length == 62){
    length--;
    }

    Random r = new Random(seed);
    int rNum;
    char temp;
    for(int i=0; i<length; i++){
    rNum = r.nextInt(62);
    seed += skip;
    r.setSeed(seed);
    if(rNum < i){
    rNum = i+1;
    }
    temp = ch[i];
    ch[i] = ch[rNum];
    ch[rNum] = temp;
    }
    return new String(ch,0,length);

    }
      

  3.   

    /**
         * 产生随机字符串,长度由参数指定。
         * @param length 产生的字符串的长度
         * @return 已产生的字符串
         */
        public static String getRandString(int length)
        {
            String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            String rev = "";
            java.util.Random f = new Random();
            for(int i=0;i<length;i++)
            {
               rev += charList.charAt(Math.abs(f.nextInt())%charList.length());
            }
            return rev;
        }
      

  4.   

    ntzls兄的代码我已经调试过了,没有通过。
    我自己写了一段,已通过测试,请大家指教。
    代码在下面:
      

  5.   

    import java.util.Random;public class randomChar{
    public static void main(String args[]){

    String s="";
    int num=0,ch=0,Ch=0;
    int re;
    Random random = new Random();

    for (int i=0;i<6;i++){

    re = random.nextInt(3);
    switch (re){
    case 0:num =48+random.nextInt(10);
       System.out.print((char)num+" ");
    break;
    case 1:ch = 97+random.nextInt(26);
       System.out.print((char)ch+" ");
    break;
    case 2:Ch =65 +random.nextInt(26);
    System.out.print((char)Ch+" ");
    break;
    default:System.out.print("This is an Exception!");

    }

    System.out.print("\n");
    }

    }
    }
      

  6.   

    强烈推荐  回复人: pease(豌豆) ( ) 信誉:100   的代码
    简单,易懂如果有什么特殊要求,改改就行了不过String.charAt()方法的效率似乎没有数组高
      

  7.   

    to:  maowupease(豌豆) 
    的不错。/**
         * 产生随机字符串,长度由参数指定。
         * @param length 产生的字符串的长度
         * @return 已产生的字符串
         */
        public static String getRandString(int length)
        {
    //没有必要构造一个String对象,应直接用char[]。既然是static方法每次调用此方法均会用到此字符集,何不设为类的静态私有成员。
            String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    //应使用char[length]代替rev
            String rev = "";
            java.util.Random f = new Random();
            for(int i=0;i<length;i++)
            {
    //由于rev设为String型致每次循环生成一个String对象,没有必要。另用%进行随机计算时间效率低。
               rev += charList.charAt(Math.abs(f.nextInt())%charList.length());
            }
            return rev;
        }
    此代码虽短但不精。
      

  8.   

    to: ntzls(三星堆) 你说得不错,将方法修改以后效率提高了很多
    具体测试数据是:
    原来的方法取得10000个需要70毫秒,下面这个方法需要50毫秒
    谢谢你的指点哦public static String getRandStringEx(int length)
    {
        byte[] charList = {'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'};
        byte[] rev = new byte[length];
        Random f = new Random();
        for(int i=0;i<length;i++)
        {
           rev[i] = charList[Math.abs(f.nextInt())%length];
        }
        return new String(rev);
    }
      

  9.   

    to: pease以产生100000个长度为10的串为例测试:
    import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    long l1,l2;

    l1 = System.currentTimeMillis();
    for(int i=0;i<100000;i++)
    A.getRandString(10);
    l2 = System.currentTimeMillis();
    System.out.println("ntzls used:"+(l2-l1));

    l1 = System.currentTimeMillis();
    for(int i=0;i<100000;i++)
    getRandStringEx(10);
    l2 = System.currentTimeMillis();
    System.out.println("pease used:"+(l2-l1));

    }
    //你的算法
    public static String getRandStringEx(int length){

    }
               //我的算法
    private static long seed = System.currentTimeMillis();
    private static long skip = Long.parseLong("187649984473770");
    private static Random random = new Random(seed);
    private static char ch[]={'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','0','1'};
    public static String getRandString(int length){
    if(length>0){

    char[] result;
    int loops;
    if(length%5 == 0){
    result = new char[length];
    loops = length/5;
    }else{
    result = new char[(length/5)*5];
    loops = length/5+1;
    }

    int ran;
    for(int i=0,j=loops; j>0; j--){
    ran = random.nextInt();
    result[i++] = ch[(byte)ran&63];
    ran >>= 6;
    result[i++] = ch[(byte)ran&63];
    ran >>= 6;
    result[i++] = ch[(byte)ran&63];
    ran >>= 6;
    result[i++] = ch[(byte)ran&63];
    ran >>= 6;
    result[i++] = ch[(byte)ran&63];
    }
    seed += skip;
    random.setSeed(seed);
    return new String(result,0,length);

    }else if(length == 0){
    return "";
    }else{
    throw new IllegalArgumentException();
    }
    }
    }
    参考数据ntzls used:130
    pease used:390
    呵呵,写一个来切磋、切磋。
      

  10.   

    见笑,已改 private static Random random = new Random();
    private static char ch[]={'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','0','1'};
    public static String getRandString(int length){
    if(length>0){
    char[] result = new char[length];
    int loops = length/5,index = 0,rand = random.nextInt();
    for(int i=0; i<length%5; i++){
    result[index++] = ch[(byte)rand&63];rand >>= 6;
    }
    for(int i=length/5; i>0; i--){
    rand = random.nextInt();
    for(int j=0; j<5; j++){
    result[index++] = ch[(byte)rand&63];rand >>= 6;
    }
    }
    return new String(result,0,length);
    }else if(length == 0){
    return "";
    }else{
    throw new IllegalArgumentException();
    }
    }