RandomUtil-隨機數、隨機字符串生成工具

package com.zxt.basic.util;

import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

/**
 * 隨機數、隨機字符串生成工具
 */
public class RandomUtil  extends Random {
	/**
	 * 全部大小寫字母和數字
	 */
	public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	/**
	 * 全部大小寫字母
	 */
	public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	/**
	 * 全部數字
	 */
	public static final String numberChar = "0123456789";
	
	/**
	 * 返回一個定長的隨機純數字字符串(只包含數字)
	 * @param length
	 *            隨機字符串長度
	 * @return 隨機字符串
	 */
	public static String generateDigitalString(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for (int i = 0; i < length; i++) {
			sb.append(numberChar.charAt(random.nextInt(numberChar.length())));
		}
		return sb.toString();
	}

	/**
	 * 返回一個定長的隨機字符串(只包含大小寫字母、數字)
	 * @param length
	 *            隨機字符串長度
	 * @return 隨機字符串
	 */
	public static String generateString(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for (int i = 0; i < length; i++) {
			sb.append(allChar.charAt(random.nextInt(allChar.length())));
		}
		return sb.toString();
	}

	/**
	 * 返回一個定長的隨機純字母字符串(只包含大小寫字母)
	 * @param length
	 *            隨機字符串長度
	 * @return 隨機字符串
	 */
	public static String generateMixString(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for (int i = 0; i < length; i++) {
			sb.append(letterChar.charAt(random.nextInt(letterChar.length())));
		}
		return sb.toString();
	}

	/**
	 * 返回一個定長的隨機純大寫字母字符串(只包含大小寫字母)
	 * @param length
	 *            隨機字符串長度
	 * @return 隨機字符串
	 */
	public static String generateLowerString(int length) {
		return generateMixString(length).toLowerCase();
	}

	/**
	 * 返回一個定長的隨機純小寫字母字符串(只包含大小寫字母)
	 * @param length
	 *            隨機字符串長度
	 * @return 隨機字符串
	 */
	public static String generateUpperString(int length) {
		return generateMixString(length).toUpperCase();
	}

	/**
	 * 生成一個定長的純0字符串
	 * @param length
	 *            字符串長度
	 * @return 純0字符串
	 */
	public static String generateZeroString(int length) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < length; i++) {
			sb.append('0');
		}
		return sb.toString();
	}

	/**
	 * 根據數字生成一個定長的字符串,長度不夠前面補0
	 * @param num
	 *            數字
	 * @param fixdlenth
	 *            字符串長度
	 * @return 定長的字符串
	 */
	public static String toFixdLengthString(long num, int fixdlenth) {
		StringBuffer sb = new StringBuffer();
		String strNum = String.valueOf(num);
		if (fixdlenth - strNum.length() >= 0) {
			sb.append(generateZeroString(fixdlenth - strNum.length()));
		} else {
			throw new RuntimeException("將數字" + num + "轉化爲長度爲" + fixdlenth
					+ "的字符串發生異常!");
		}
		sb.append(strNum);
		return sb.toString();
	}

	/**
	 * 根據數字生成一個定長的字符串,長度不夠前面補0
	 * @param num
	 *            數字
	 * @param fixdlenth
	 *            字符串長度
	 * @return 定長的字符串
	 */
	public static String toFixdLengthString(int num, int fixdlenth) {
		StringBuffer sb = new StringBuffer();
		String strNum = String.valueOf(num);
		if (fixdlenth - strNum.length() >= 0) {
			sb.append(generateZeroString(fixdlenth - strNum.length()));
		} else {
			throw new RuntimeException("將數字" + num + "轉化爲長度爲" + fixdlenth
					+ "的字符串發生異常!");
		}
		sb.append(strNum);
		return sb.toString();
	}
	
	
	/**   
	 * serialVersionUID:TODO(用一句話描述這個變量表示什麼)   
	 *   
	 * @since 1.0.0   
	 */   
	
	private static final long serialVersionUID = 1L;

	public static RandomUtil getInstance() {
		return _instance;
	}

	public RandomUtil() {
		super();
	}

	public RandomUtil(long seed) {
		super(seed);
	}

	public int[] nextInt(int n, int size) {
		if (size > n) {
			size = n;
		}

		Set set = new LinkedHashSet();

		for (int i = 0; i < size; i++) {
			while (true) {
				Integer value = new Integer(nextInt(n));

				if (!set.contains(value)) {
					set.add(value);

					break;
				}
			}
		}

		int[] array = new int[set.size()];

		Iterator itr = set.iterator();

		for (int i = 0; i < array.length; i++) {
			array[i] = ((Integer)itr.next()).intValue();
		}

		return array;
	}

	public void randomize(char array[]) {
		int length = array.length;

		for(int i = 0; i < length - 1; i++) {
			int x = nextInt(length);
			char y = array[i];

			array[i] = array[i + x];
			array[i + x] = y;

			length--;
		}
	}

	public void randomize(int array[]) {
		int length = array.length;

		for(int i = 0; i < length - 1; i++) {
			int x = nextInt(length);
			int y = array[i];

			array[i] = array[i + x];
			array[i + x] = y;

			length--;
		}
	}

	public void randomize(List list) {
		int size = list.size();

		for(int i = 0; i <= size; i++) {
			int j = nextInt(size);
			Object obj = list.get(i);

			list.set(i, list.get(i + j));
			list.set(i + j, obj);

			size--;
		}
	}

	public void randomize(Object array[]) {
		int length = array.length;

		for(int i = 0; i < length - 1; i++) {
			int x = nextInt(length);
			Object y = array[i];

			array[i] = array[i + x];
			array[i + x] = y;

			length--;
		}
	}

	public String randomize(String s) {
		if (s == null) {
			return null;
		}

		char[] array = s.toCharArray();

		randomize(array);

		return new String(array);
	}

	private static RandomUtil _instance = new RandomUtil();
}
相關文章
相關標籤/搜索