生成不重复的字符串来.

我们经常会遇到一个需求,就是需要一个唯一的字符串来标示一些东西。比如上传的文件,当然不能重名,通常的做法就是生成一个时间戳来做,但是在高并发的项目中,有时候时间戳也许还不够,于是就再加上一些随机的字符串吧,慢慢地这个方法就出来了。下边是代码。

 

插入特殊字符在linux下可以正常使用,在windows总有的符号不能做文件名。

 

/**
	 * 生成唯一字符串 
	 * 作者:解镭 Email:xielei@live.com 
	 * 创建日期: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:xielei@live.com 
	 * 创建日期: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", "!", "@", "#", "$", "%", "^", "&", "(",
			")" };
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值