/** * 生成随机字符串并排序 * @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了?