/**
* 生成随机字符串并排序
* @param args
*/
public void testStringSort(){
String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
List<String> stringList = new ArrayList<String>();
for(int i = 0;i < 10;i++){
StringBuilder sb = new StringBuilder();//创建一个新的新的字符串对象
// 第一次while循环用来检查是否产生相同的字符串,如果相同,重新执行,不同则添加到stringList中
do{
int stringLength = random.nextInt(10);
//确保随机产生的数字不为0,也就是确保字符串的长度不为0
if(stringLength == 0){
continue;
} else {
for(int j = 0;j < stringLength;j++){
int num = random.nextInt(str.length());//随机产生一个str的索引位置
sb.append(str.charAt(num));//将str在num位置上的字符增加到sb字符串对象中
}
}
}while(stringList.contains(sb.toString()));
stringList.add(sb.toString());
System.out.println("成功添加字符串: " + sb.toString());
}
System.out.println("------------排序前-----------");
for(String string:stringList)
System.out.println("包含字符串:"+string);
Collections.sort(stringList);
System.out.println("------------排序后-----------");
for(String string:stringList)
System.out.println("包含字符串:"+string);
}当stringLength等于0的时候,执行continue,然后判断循环条件,条件为假,循环结束,空串被添加到List中。建议修改方法:在条件中加一个判断。while (stringList.contains(sb.toString())||sb.toString().equals(""))。当List中不存在此字符串或者sb为空串的时候执行循环。
int num = random.nextInt(str.length());这里有问题
应该把str.length()改为str.length()-1; charAt第一个数对应的是0而不是1
运行的过程中发现生成的字符串有空的情况,哪里出现BUG了?