最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 隨機(jī)取字符串的工具類

 更新時(shí)間:2014年01月19日 00:28:37   作者:  
隨機(jī)數(shù)在實(shí)際中使用很廣泛,比如要隨即生成一個(gè)固定長(zhǎng)度的字符串、數(shù)字。或者隨即生成一個(gè)不定長(zhǎng)度的數(shù)字、或者進(jìn)行一個(gè)模擬的隨機(jī)選擇等等。Java提供了最基本的工具,可以幫助開發(fā)者來實(shí)現(xiàn)這一切

一、Java隨機(jī)數(shù)的產(chǎn)生方式

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

二、Random類API說明

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

 如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實(shí)現(xiàn),為類 Random 指定了特定的算法。
  很多應(yīng)用程序會(huì)發(fā)現(xiàn) Math 類中的 random 方法更易于使用。

   2、方法摘要
   Random()
  創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。

   Random(long seed)
  使用單個(gè) long 種子創(chuàng)建一個(gè)新隨機(jī)數(shù)生成器:
         public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機(jī)數(shù)生成器的狀態(tài)。

   protected int next(int bits)
  生成下一個(gè)偽隨機(jī)數(shù)。

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

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

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

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

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

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

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

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

   void setSeed(long seed)
  使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。

三、Random類使用說明

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

四、綜合應(yīng)用

  下面通過最近寫的一個(gè)隨機(jī)數(shù)工具類來展示用法:

復(fù)制代碼 代碼如下:

   import java.util.Random;
   /**
   * 隨機(jī)數(shù)、隨即字符串工具
   * 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";
   /**
   * 返回一個(gè)定長(zhǎng)的隨機(jī)字符串(只包含大小寫字母、數(shù)字)
   *
   * @param length 隨機(jī)字符串長(zhǎng)度
   * @return 隨機(jī)字符串
   */
   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();
   }

   /**
   * 返回一個(gè)定長(zhǎng)的隨機(jī)純字母字符串(只包含大小寫字母)
   *
   * @param length 隨機(jī)字符串長(zhǎng)度
   * @return 隨機(jī)字符串
   */
   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();
   }

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

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

   /**
   * 生成一個(gè)定長(zhǎng)的純0字符串
   *
   * @param length 字符串長(zhǎng)度
   * @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();
   }

   /**
   * 根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0
   *
   * @param num 數(shù)字
   * @param fixdlenth 字符串長(zhǎng)度
   * @return 定長(zhǎng)的字符串
   */
   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( "將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");
   }
   sb.append(strNum);
   return sb.toString();
   }

   /**
   * 根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0
   *
   * @param num 數(shù)字
   * @param fixdlenth 字符串長(zhǎng)度
   * @return 定長(zhǎng)的字符串
   */
   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( "將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");
   }
   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));
   }
   }


運(yùn)行結(jié)果:
   vWMBPiNbzfGCpHG
   23hyraHdJkKPwMv
   tigowetbwkm1nde
   BPZ1KNEJPHB115N
   000000000000000
   000000000000123
   000000000000123
   Process finished with exit code 0

六、總結(jié)

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

補(bǔ)充代碼:

復(fù)制代碼 代碼如下:

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";

  /**
     * 返回一個(gè)定長(zhǎng)的隨機(jī)字符串(只包含大小寫字母、數(shù)字)
     * @param length 隨機(jī)字符串長(zhǎng)度
     * @return 隨機(jī)字符串
     */
 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();
 }
 /**
     * 返回一個(gè)定長(zhǎng)的隨機(jī)純字母字符串(只包含大小寫字母)
     * @param length 隨機(jī)字符串長(zhǎng)度
     * @return 隨機(jī)字符串
     */
    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();
    }
    /**
     * 返回一個(gè)定長(zhǎng)的隨機(jī)純大寫字母字符串(只包含大小寫字母)
     *
     * @param length 隨機(jī)字符串長(zhǎng)度
     * @return 隨機(jī)字符串
     */
    public static String generateLowerString(int length) {
            return generateMixString(length).toLowerCase();
    }

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

    /**
     * 生成一個(gè)定長(zhǎng)的純0字符串
     *
     * @param length 字符串長(zhǎng)度
     * @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();
    }

    /**
     * 根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0
     *
     * @param num             數(shù)字
     * @param fixdlenth 字符串長(zhǎng)度
     * @return 定長(zhǎng)的字符串
     */
    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("將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");
            }
            sb.append(strNum);
            return sb.toString();
    }

    /**
     * 根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0
     *
     * @param num             數(shù)字
     * @param fixdlenth 字符串長(zhǎng)度
     * @return 定長(zhǎng)的字符串
     */
    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("將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");
            }
            sb.append(strNum);
            return sb.toString();
    }

    /**
     * 每次生成的len位數(shù)都不相同
     * @param param  
     * @return 定長(zhǎng)的數(shù)字
     */
    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));
    }
}

相關(guān)文章

  • java泛型基本知識(shí)及通用方法

    java泛型基本知識(shí)及通用方法

    這篇文章主要介紹了java泛型基礎(chǔ)知識(shí)及通用方法,從以下幾個(gè)方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2019-04-04
  • Java中Arrays的介紹及使用方法示例

    Java中Arrays的介紹及使用方法示例

    這篇文章主要給大家介紹了關(guān)于Java中Arrays及使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談對(duì)于DAO設(shè)計(jì)模式的理解

    淺談對(duì)于DAO設(shè)計(jì)模式的理解

    這篇文章主要介紹了淺談對(duì)于DAO設(shè)計(jì)模式的理解,小編覺得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Java微信支付之服務(wù)號(hào)支付代碼示例

    Java微信支付之服務(wù)號(hào)支付代碼示例

    這篇文章主要介紹了Java微信支付之服務(wù)號(hào)支付代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換

    Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換

    這篇文章主要介紹了Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解Intellij IDEA中.properties文件中文顯示亂碼問題的解決

    詳解Intellij IDEA中.properties文件中文顯示亂碼問題的解決

    這篇文章主要介紹了詳解Intellij IDEA中.properties文件中文顯示亂碼問題的解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 解決idea找不到或無法加載主類的錯(cuò)誤處理

    解決idea找不到或無法加載主類的錯(cuò)誤處理

    這篇文章主要介紹了解決idea找不到或無法加載主類的錯(cuò)誤處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 基于servlet實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)頁訪問次數(shù)

    基于servlet實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)頁訪問次數(shù)

    這篇文章主要為大家詳細(xì)介紹了基于servlet實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)頁訪問次數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解Mybatis核心配置文件

    詳解Mybatis核心配置文件

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Mybatis核心配置文件展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java中Steam流的用法詳解

    Java中Steam流的用法詳解

    Stream是Java?8?API添加的一個(gè)新的抽象,稱為流Stream,本文主要介紹了Java中Steam流的用法詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-04-04

最新評(píng)論

梅河口市| 寿光市| 舟曲县| 绵竹市| 都匀市| 盈江县| 临澧县| 高安市| 高碑店市| 岳阳市| 禄丰县| 秦安县| 安泽县| 横山县| 什邡市| 金寨县| 阜康市| 桐柏县| 怀柔区| 乐业县| 西平县| 扬中市| 泗阳县| 剑河县| 连江县| 乐山市| 循化| 曲麻莱县| 梁山县| 三都| 卓资县| 丹阳市| 烟台市| 施秉县| 房产| 霍邱县| 渝北区| 玉屏| 达尔| 江山市| 吉林省|