我们经常会遇到一个需求,就是需要一个唯一的字符串来标示一些东西。比如上传的文件,当然不能重名,通常的做法就是生成一个时间戳来做,但是在高并发的项目中,有时候时间戳也许还不够,于是就再加上一些随机的字符串吧,慢慢地这个方法就出来了。下边是代码。
插入特殊字符在linux下可以正常使用,在windows总有的符号不能做文件名。
/**
* 生成唯一字符串
* 作者:解镭 Email:[email protected]
* 创建日期:May 14, 2008
* 创建时间: 5:07:39 PM
* @param length 需要长度
* @param symbol 是否允许出现特殊字符 -- !@#$%^&*()
* @return
*/
public static String getUniqueString(int length, boolean symbol)
throws Exception {
Random ran = new Random();
int num = ran.nextInt(61);
String returnString = "";
String str = "";
for (int i = 0; i < length;) {
if (symbol)
num = ran.nextInt(70);
else
num = ran.nextInt(61);
str = strArray[num];
if (!(returnString.indexOf(str) >= 0)) {
returnString += str;
i++;
}
}
return returnString;
}
/**
* 生成唯一字符串 会已时间 加上你需要数量的随机字母
* 如:getUniqueString(6,true,"yyyyMMddHHmmss")
* 返回:20080512191554juHkn4
* 作者:解镭 Email:[email protected]
* 创建日期:May 14, 2008
* 创建时间: 5:07:39 PM
* @param length 需要长度
* @param symbol 是否允许出现特殊字符 -- !@#$%^&*()
* @param dateformat 时间格式字符串
* @return
*/
public static String getUniqueString(int length, boolean symbol,
String dateformat) throws Exception {
Random ran = new Random();
int num = ran.nextInt(61);
Calendar d = Calendar.getInstance();
Date nowTime = d.getTime();
SimpleDateFormat sf = new SimpleDateFormat(dateformat);
String returnString = sf.format(nowTime);
String str = "";
for (int i = 0; i < length;) {
if (symbol)
num = ran.nextInt(70);
else
num = ran.nextInt(61);
str = strArray[num];
if (!(returnString.indexOf(str) >= 0)) {
returnString += str;
i++;
}
}
return returnString;
}
/**
* 给生成唯一字符串使用
*/
private static String[] strArray = new String[] { "a", "b", "c", "d", "e",
"f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E",
"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "!", "@", "#", "$", "%", "^", "&", "(",
")" };