亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)文章

  • 詳解IntelliJ IDEA創(chuàng)建spark項(xiàng)目的兩種方式

    詳解IntelliJ IDEA創(chuàng)建spark項(xiàng)目的兩種方式

    這篇文章主要介紹了詳解IntelliJ IDEA創(chuàng)建spark項(xiàng)目的兩種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java8?Stream?流常用方法合集

    Java8?Stream?流常用方法合集

    這篇文章主要介紹了?Java8?Stream?流常用方法合集,Stream?是?Java8?中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作,下文相關(guān)資料,需要的朋友可以參考一下
    2022-04-04
  • maven中pom.xml詳細(xì)介紹

    maven中pom.xml詳細(xì)介紹

    最近在學(xué)習(xí)maven,這篇文章主要介紹了maven中pom.xml詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java 在PPT中添加混合圖表過程詳解

    Java 在PPT中添加混合圖表過程詳解

    這篇文章主要介紹了Java 在PPT中添加混合圖表過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • JAVA數(shù)字千分位和小數(shù)點(diǎn)的現(xiàn)實(shí)代碼(處理金額問題)

    JAVA數(shù)字千分位和小數(shù)點(diǎn)的現(xiàn)實(shí)代碼(處理金額問題)

    這篇文章主要介紹了JAVA數(shù)字千分位和小數(shù)點(diǎn)的現(xiàn)實(shí)代碼(處理金額問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java連接Access數(shù)據(jù)庫(kù)的方法

    java連接Access數(shù)據(jù)庫(kù)的方法

    這篇文章主要為大家詳細(xì)介紹了java連接Access數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java自定義異常與異常使用的最佳方式

    Java自定義異常與異常使用的最佳方式

    這篇文章主要介紹了Java自定義異常與異常使用的最佳方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解

    JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解

    這篇文章主要介紹了JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼

    spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼

    本篇文章主要介紹了spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 2020Mac M1安裝jdk和IDEA的詳細(xì)方法

    2020Mac M1安裝jdk和IDEA的詳細(xì)方法

    這篇文章主要介紹了2020Mac M1安裝jdk和IDEA的詳細(xì)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論