我們之前使用接口類及接口實現類的方式,來定義了我們使用的工具類。
而所有的工具類中,隨機函數是比較難於處理的。因為隨機的對象不明確,隨機的個數不明確。我們可以使用定義隨機類的方式,來簡單而快速的處理我們的隨機對象生成的需要。
首先,我們先定義一個randomUtil的類,在這個類中,我們可以將想生成的隨機函數進行具體的定義。在此,我們舉幾個例子。比如,隨機生成一個整數,隨機生成一個定長(或不定長)的,帶漢字(或不帶漢字)的字符串,隨機生成一個數組等等。
來看一下具體的RandomUtil類的代碼:
import java.util.Random; public class RandomUtil { //定義字母和數字 public static String randomBase = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; public static String randomNumberBase = "0123456789"; //Unicode 基本漢字編碼范圍0x4e00~0x9fa5 共 20902個,這個是從網上查到的。因此,我們要把這個隨機的范圍給計算出來。 private final static int HANZI_LENGTH = 20902 ; public static Random random = new Random(); /** * 隨機生成一個漢字 * @return */ protected static char getRandomHanZi() { Random ran = new Random();
//漢字編碼從0x4e00開始到后面的20902之間 return (char) (0x4e00 + ran.nextInt(HANZI_LENGTH)); } /** * 隨機生成一個字母 * @return */ protected static char getRandomStr() { Random ran = new Random(); return (char) randomBase.charAt(ran.nextInt(62)); } /** * 隨機生成一個帶有中文的字符串 * @param length為字符串長度的參數 * @return */ public static String getRandomText(int length) { Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) {
//使用一個隨機數字作為開關 int randomNum = random.nextInt(2); char ch = 0 ; if (randomNum==0) {//生成漢字 ch = getRandomHanZi(); }else if (randomNum==1) {//生成數字或者字符 ch = getRandomStr(); } sb.append(String.valueOf(ch)); } return sb.toString(); }
/**
* 隨機生成一個帶有中文的字符串
* @param length為字符串長度的參數,false為字符串,true為數字
* @return
*/
public static String getRandom(int length, boolean onlyNumber) { String base; if (onlyNumber) { base = randomNumberBase; } else { base = randomBase; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) { char chr; do { int number = random.nextInt(base.length()); chr = base.charAt(number); } while (i==0&&chr=='0') ;//第一個字符不能為0, sb.append(chr); } return sb.toString(); } public static String getRandomArr(int arrLength, int length, boolean flag) { StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < arrLength; i++) { sBuffer.append(getRandom(length, flag)).append(","); } int leng = sBuffer.toString().length(); return sBuffer.toString().substring(0, leng-1); } /** * 生成定長的字符串數組 * @param arrLength 數組長度 * @param paramStr * @return */ public static String generateStrArr(int arrLength, String paramStr) { StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < arrLength; i++) { sBuffer.append("\"").append(paramStr).append("\"").append(","); } int leng = sBuffer.toString().length(); return sBuffer.toString().substring(0, leng-1); } }
在這個隨機類中,我們定義了很多關於隨機對象生成的方法,並確切定義了參數。於是,我們根據這個類,以及前面接口實現類定義的方法,可以快速的定義相關的隨機函數。例如:
public class RandomFunction implements functionInterface { @Override public String execute(String[] args) { int len = args.length; int length = 6;// 默認為6 boolean flag = false;// 默認為false if (len > 0) {// 第一個參數字符串長度 length = Integer.valueOf(args[0]); } if (len > 1) {// 第二個參數是否純字符串 flag = Boolean.valueOf(args[1]); } return RandomUtil.getRandom(length, flag); } @Override public String getReferenceKey() { return "random"; } }
在這里,我們定義了該random函數。使用方法如下:
- __random(param1,param2):隨機生成一個定長的字符串(不含中文)。param1:長度(非必填,默認為6),param2:純數字標識(非必填,默認為false)。
接下來,我們再繼續第二個隨機函數:
public class RandomStrArrFucntion implements functionInterface{ @Override public String execute(String[] args) { // 第一個參數為數組長度 即生成參數個數 // 第二個參數為參數長度 // 第三個參數為是否只有數字標志 int len = args.length; int arrLength = 1; // 默認數組長度為1 int length = 6;// 默認參數長度為6 boolean flag = false;// 默認為false if (len == 1) { arrLength = Integer.valueOf(args[0]); } else if (len == 2) { arrLength = Integer.valueOf(args[0]); length = Integer.valueOf(args[1]); } else if (len == 3) { arrLength = Integer.valueOf(args[0]); length = Integer.valueOf(args[1]); flag = Boolean.valueOf(args[1]); } return RandomUtil.getRandomArr(arrLength, length, flag); }
@Override public String getReferenceKey() { // TODO Auto-generated method stub return "randomStrArr"; } }
在這里我們定義了隨機生成字符串數組的的函數randomStrArr,使用形式如下:
- __randomStrArr(param1,param2,param3):隨機生成一個定長字符串數組。param1:數組長度(非必填,默認為1),param2:單個字符串長度(非必填,默認6),param3:純數字標識(非必填,默認為false)。
接下來,我們再看第三個隨機函數:
public class RandomTextFunction implements functionInterface{ @Override public String execute(String[] args) { int length = 6;// 默認為6 if (StringUtil.isNotEmpty(args[0])) { length = Integer.valueOf(args[0]);// 參數是長度 } return RandomUtil.getRandomText(length); } @Override public String getReferenceKey() { // TODO Auto-generated method stub return "randomText"; } }
在這里我們定義了第三個隨機函數randomText,使用方式如下:
- __randomText(param1): 隨機生成一個定長的字符串(含中文)。param1:長度(非必填,默認為6)
可以看到,我們再定義以上三個隨機函數實現類的時候,都調用了RandomUtil里定義的方法。因此,如果我們在RandomUtil中定義了相關的方法后,用來生成隨機函數,是非常快速和方便的。