亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java 隨機取字符串的工具類

2019-11-26 15:45:48
字體:
來源:轉載
供稿:網友

一、Java隨機數的產生方式

   在Java中,隨機數的概念從廣義上將,有三種。
   1、通過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。
   2、通過Math.random()返回一個0到1之間的double值。
   3、通過Random類來產生一個隨機數,這個是專業的Random工具類,功能強大。

二、Random類API說明

   1、Java API說明
   Random類的實例用于生成偽隨機數流。此類使用 48 位的種子,使用線性同余公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節)。

 如果用相同的種子創建兩個 Random 實例,則對每個實例進行相同的方法調用序列,它們將生成并返回相同的數字序列。為了保證屬性的實現,為類 Random 指定了特定的算法。
  很多應用程序會發現 Math 類中的 random 方法更易于使用。

   2、方法摘要
   Random()
  創建一個新的隨機數生成器。

   Random(long seed)
  使用單個 long 種子創建一個新隨機數生成器:
         public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數生成器的狀態。

   protected int next(int bits)
  生成下一個偽隨機數。

   boolean nextBoolean()
  返回下一個偽隨機數,它是從此隨機數生成器的序列中取出的、均勻分布的 boolean 值。

   void nextBytes(byte[] bytes)
  生成隨機字節并將其置于用戶提供的字節數組中。

   double nextDouble()
  返回下一個偽隨機數,它是從此隨機數生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。

   float nextFloat()
  返回下一個偽隨機數,它是從此隨機數生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。

   double nextGaussian()
  返回下一個偽隨機數,它是從此隨機數生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標準偏差是 1.0。

   int nextInt()
  返回下一個偽隨機數,它是此隨機數生成器的序列中均勻分布的 int 值。

   int nextInt(int n)
  返回一個偽隨機數,它是從此隨機數生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。

   long nextLong()
  返回下一個偽隨機數,它是從此隨機數生成器的序列中取出的、均勻分布的 long 值。

   void setSeed(long seed)
  使用單個 long 種子設置此隨機數生成器的種子。

三、Random類使用說明

   1、帶種子與不帶種子的區別
   Random類使用的根本是策略分帶種子和不帶種子的Random的實例。
  通俗說,兩者的區別是:
  帶種子的,每次運行生成的結果都是一樣的。
  不帶種子的,每次運行生成的都是隨機的,沒有規律可言。
   2、創建不帶種子的Random對象
   Random random = new Random();
   3、創建不帶種子的Random對象
   有兩種方法:
   1) Random random = new Random(555L);
   2) Random random = new Random();
   random.setSeed(555L);

四、綜合應用

  下面通過最近寫的一個隨機數工具類來展示用法:

復制代碼 代碼如下:

   import java.util.Random;
   /**
   * 隨機數、隨即字符串工具
   * User: leizhimin
   * Date: 2008-11-19 9:43:09
   */
   public class RandomUtils {
   public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   public static final String numberChar = "0123456789";
   /**
   * 返回一個定長的隨機字符串(只包含大小寫字母、數字)
   *
   * @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(allChar.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();
   }

   public static void main(String[] args) {
   System.out.println(generateString(15));
   System.out.println(generateMixString(15));
   System.out.println(generateLowerString(15));
   System.out.println(generateUpperString(15));
   System.out.println(generateZeroString(15));
   System.out.println(toFixdLengthString(123, 15));
   System.out.println(toFixdLengthString(123L, 15));
   }
   }


運行結果:
   vWMBPiNbzfGCpHG
   23hyraHdJkKPwMv
   tigowetbwkm1nde
   BPZ1KNEJPHB115N
   000000000000000
   000000000000123
   000000000000123
   Process finished with exit code 0

六、總結

   1、隨機數很常用,在Java有三種產生方式,以Random隨機數的使用最為復雜。
   2、Random類對象有是否帶種子之分,帶種子的只要種子相同,多次運行,生成隨機數的結果總是那樣。
   3、帶種子隨機數的帶種子的對象創建方式有兩種,效果一樣。但是帶種子的隨機數用處似乎不大。
   4、Random的功能涵蓋了Math.random()的功能。
   5、可以通過隨機數去做實現隨機字符串等復雜的隨機數據。
   6、不要研究不重復的隨機數,意義不大   

補充代碼:

復制代碼 代碼如下:

package com.test;
import java.util.Random;

public class RandomUtils {
 public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 public static final String NUMBERCHAR = "0123456789";

  /**
     * 返回一個定長的隨機字符串(只包含大小寫字母、數字)
     * @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(ALLCHAR.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();
    }

    /**
     * 每次生成的len位數都不相同
     * @param param  
     * @return 定長的數字
     */
    public static int getNotSimple(int[] param,int len)
    {
         Random rand = new Random();
         for (int i = param.length; i > 1; i--)
         {
             int index = rand.nextInt(i);
             int tmp = param[index];
             param[index] = param[i - 1];
             param[i - 1] = tmp;
         }
         int result = 0;
         for(int i = 0; i < len; i++)
         {
             result = result * 10 + param[i];
         }
         return result;
    }

    public static void main(String[] args) {
            System.out.println(generateString(10));
            System.out.println(generateMixString(10));
            System.out.println(generateLowerString(10));
            System.out.println(generateUpperString(10));
            System.out.println(generateZeroString(10));
            System.out.println(toFixdLengthString(123, 10));
            System.out.println(toFixdLengthString(123L, 10));
            int[] in = {1,2,3,4,5,6,7};
            System.out.println(getNotSimple(in,3));
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产精品亚洲一区| 成人欧美在线视频| 亚洲国产精品资源| 2019中文字幕免费视频| 亚洲精品视频久久| 97精品一区二区视频在线观看| 日韩精品免费视频| 国产亚洲欧洲在线| 国产欧美最新羞羞视频在线观看| 九九九热精品免费视频观看网站| 大荫蒂欧美视频另类xxxx| 亚洲性视频网站| www.亚洲一区| 亚洲第一精品夜夜躁人人躁| 亚洲iv一区二区三区| 欧美裸体xxxx极品少妇软件| 亚洲欧美在线免费观看| 亚洲女人初尝黑人巨大| 成人国产精品av| 亚洲精品美女在线观看播放| 国产美女高潮久久白浆| 国产亚洲精品一区二555| 日韩av综合网| 欧美多人乱p欧美4p久久| 亚洲精品av在线| 亚洲欧洲成视频免费观看| 久久久免费高清电视剧观看| 国产999精品视频| 69精品小视频| 欧美一区视频在线| 成人网在线视频| 国产91在线视频| 国产一区二区三区在线观看网站| 亚洲精品xxxx| 欧美激情欧美激情在线五月| 国产精品自产拍高潮在线观看| 亚洲三级 欧美三级| 欧美一区二区三区四区在线| 一区二区三区黄色| 精品偷拍一区二区三区在线看| 日本久久久a级免费| 久久久久久一区二区三区| 97成人精品视频在线观看| 欧美日韩国产色| 亚洲福利视频网站| 日韩专区中文字幕| 久久久久久久久国产精品| 久久久国产精品亚洲一区| 美乳少妇欧美精品| 日韩动漫免费观看电视剧高清| 91精品国产沙发| 成人伊人精品色xxxx视频| 国产精品国内视频| 91精品国产自产91精品| 91久久综合亚洲鲁鲁五月天| 中文字幕无线精品亚洲乱码一区| 久久中文字幕国产| 久久网福利资源网站| 1769国产精品| 91九色国产视频| 在线日韩中文字幕| 色青青草原桃花久久综合| 91精品国产777在线观看| 亚洲三级 欧美三级| 欧美大片免费观看| 欧美精品一区二区免费| 亚洲变态欧美另类捆绑| 久久偷看各类女兵18女厕嘘嘘| 国产精品福利网| 国产视频一区在线| 日韩免费黄色av| 亚洲国产一区自拍| 久久99精品久久久久久噜噜| 欧美亚洲成人xxx| 色偷偷88888欧美精品久久久| 国产精品都在这里| 国产性猛交xxxx免费看久久| 亚洲国产日韩欧美综合久久| 亚洲精品免费在线视频| 91精品久久久久久久久久久久久久| 日韩欧美在线视频免费观看| 91在线观看欧美日韩| 日韩不卡中文字幕| 在线视频欧美性高潮| 亚洲图片欧洲图片av| 国产一区二区在线播放| 91免费精品国偷自产在线| 中文字幕在线观看亚洲| 亚洲国产精品高清久久久| 最近2019年手机中文字幕| 欧美大片在线影院| 精品福利樱桃av导航| 亚洲欧美日韩在线高清直播| 国产精品美腿一区在线看| 精品久久久久久久久久久| 亚洲欧洲国产伦综合| 97国产精品视频人人做人人爱| 国产日本欧美一区二区三区在线| 亚洲最大的av网站| 精品久久久久久中文字幕| 国产日本欧美视频| 日本三级韩国三级久久| 欧美一级淫片videoshd| 日韩精品有码在线观看| 日韩女优人人人人射在线视频| 黑人极品videos精品欧美裸| 亚洲精品视频在线观看视频| 国产精品毛片a∨一区二区三区|国| 91精品国产综合久久香蕉922| 亚洲一区二区三区视频播放| 青草青草久热精品视频在线网站| 色爱精品视频一区| 色吧影院999| 欧洲亚洲免费在线| 伊人一区二区三区久久精品| 亚洲精品电影网在线观看| 97精品视频在线观看| 久久久噜久噜久久综合| 疯狂蹂躏欧美一区二区精品| 国产精品私拍pans大尺度在线| 成人h片在线播放免费网站| 日韩在线观看高清| 日韩av综合中文字幕| 日韩美女在线播放| 91九色国产社区在线观看| 成人免费网视频| 色婷婷av一区二区三区在线观看| 国产精品欧美日韩久久| 日韩av免费在线观看| 日韩在线观看免费高清完整版| 最近2019好看的中文字幕免费| 97在线看福利| 日韩女优人人人人射在线视频| 欧洲成人午夜免费大片| 中文日韩电影网站| 国精产品一区一区三区有限在线| 国产日韩精品入口| 亚洲三级av在线| 精品一区二区三区三区| 日韩在线播放视频| 高清亚洲成在人网站天堂| 国产精品自产拍在线观看中文| 亚洲欧洲日韩国产| 日韩免费观看视频| 中文精品99久久国产香蕉| 91精品国产成人www| 欧美日韩一区二区在线| 国产欧美日韩免费| 亚洲天堂av高清| 亚洲国产精品嫩草影院久久| 欧美精品久久久久| 久99久在线视频| 2024亚洲男人天堂| 久久久久久久久综合| 日韩黄色高清视频| 国产91色在线播放| 最近2019年手机中文字幕| 久久91亚洲精品中文字幕奶水| 毛片精品免费在线观看| 亚洲区bt下载| 久久午夜a级毛片| 亚洲伦理中文字幕| 97涩涩爰在线观看亚洲| 国产精品国产亚洲伊人久久|