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(); }