java中,我想随机获取不重复的字符串?应该怎么办?
1.先确定字符串的长度;
2.再确定字符串包括哪些字符;//这样可以确定字符的ASCII范围
3.然后就有很多方法去随机获取字符:
把字符存放在一个Map中的value中,如:map.put(1,"字符1");map.put(2,"字符2");
map.put(3,"字符3");一次类推,通过Math.random()*字符的个数,取整就可以得到key值,
map.get(key),value不为null,然后在map中删除这个key-value,可以设置map.put(key,null);
循环到字符串的长度为需要的长度。
具体一种方法的代码:
import java.util.HashMap;
import java.util.Map;
public class RandomStr {
public static void main(String[] args) {
for(int i=0; i< 10; i++){//测试10次产生随机不重复字符串
generateRandomStr(5);
}
}
/**
* 产生不重复的随机字符串
* @param len 生成字符串的长度
* @return
*/
public static String generateRandomStr(int len){
String strRange = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//字符串范围,根据自己的需求确定
Map<String, String> tmp = new HashMap<String, String>();
for(int i=0; i<strRange.length(); i++){
tmp.put(i+"",strRange.charAt(i)+"");
}
StringBuffer result=new StringBuffer();
for(int i=0; i<len; i++){
String key = (int)(Math.random()*(strRange.length()-i))+"";
result.append(tmp.get(key));
tmp.remove(key);
tmp.put(key, tmp.get((strRange.length()-i-1)+""));//拿最后一个字符填充删除的位置key-value
}
System.out.println(result);
return result.toString();
}
}
String str = "0123456789abcdefghijklmnopqrstuvwxyz";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append(str.charAt((int) (Math.random() * 36)));
}
return builder.toString().toUpperCase();
}