想附机的产生一个字符(的串),如“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;
}
------解决方案--------------------
把while部分换成do...while就好了,你现在的写法,while循环是永远也不会执行的.
下面是代码.
- Java code
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; }
------解决方案--------------------
这个方法里没有必要声明那么多变量,可以把Random和字符数组声明在方法外进行缓存,不用每次都创建一个新对象,我帮你重新改了一下代码,你可以参考一下.
- Java code
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); }}
------解决方案--------------------
这里边存在死循环的可能性,如果你所要的随机字符串长度大于numbersAndLetters数组的长度就会出现死循环,所以要在while加一个条件
- Java code
while (strExclude.indexOf(randC) > 0 && [color=#FF0000]strExclude.length < numbersAndLetters.length[/color]);
------解决方案--------------------
在进入while循环之前应该要先执行:
randC = numbersAndLetters[randGen.nextInt(61)];
randStr=String.valueOf(randC);
这两句吧,否则randStr不是一直为空串么?