想附机的产生一个字符(的串),如“A” 或“w”,但要调用多次,且为了避免重复,加了个排除strExclude,如果得到的字串在此字符串内存在,就再生成一个,直到不在strExclude串中:   private String GetRandomCharString(String strExclude){
     Random randGen = null;
     char[] numbersAndLetters = null;     if (randGen == null) 
     {
     randGen = new Random();
     numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
     }
     char randC;
     String randStr="";
     while(strExclude.indexOf(randStr)>0){    
     randC = numbersAndLetters[randGen.nextInt(61)];
     randStr=String.valueOf(randC);
     }
     return randStr;
    }

解决方案 »

  1.   

    把while部分换成do...while就好了,你现在的写法,while循环是永远也不会执行的.
    下面是代码.public static String GetRandomCharString(String strExclude) {
    Random randGen = null;
    char[] numbersAndLetters = null; if (randGen == null) {
    randGen = new Random();
    numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    .toCharArray();
    }
    char randC;
    String randStr = "";
    do {
    randC = numbersAndLetters[randGen.nextInt(61)];
    randStr = String.valueOf(randC);
    } while (strExclude.indexOf(randStr) > 0);
    return randStr;
    }
      

  2.   

    这个方法里没有必要声明那么多变量,可以把Random和字符数组声明在方法外进行缓存,不用每次都创建一个新对象,我帮你重新改了一下代码,你可以参考一下.import java.util.Random;public class Demo {

    public static void main(String[] args) {
    String str = "";
    for(int i = 0; i < 15; i++) {
    str += GetRandomCharString(str);
    }
    System.out.println(str);
    }
    private static Random randGen = new Random();;
    private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    .toCharArray();
    public static String GetRandomCharString(String strExclude) {
    char randC;
    do {
    randC = numbersAndLetters[randGen.nextInt(61)];
    } while (strExclude.indexOf(randC) > 0);
    return String.valueOf(randC);
    }
    }
      

  3.   

    这里边存在死循环的可能性,如果你所要的随机字符串长度大于numbersAndLetters数组的长度就会出现死循环,所以要在while加一个条件while (strExclude.indexOf(randC) > 0 && strExclude.length < numbersAndLetters.length);
      

  4.   

    在进入while循环之前应该要先执行:
    randC = numbersAndLetters[randGen.nextInt(61)];
      randStr=String.valueOf(randC);
    这两句吧,否则randStr不是一直为空串么?