程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java 隨機取字符串的對象類

Java 隨機取字符串的對象類

編輯:關於JAVA

Java 隨機取字符串的對象類。本站提示廣大學習愛好者:(Java 隨機取字符串的對象類)文章只能為提供參考,不一定能成為您想要的結果。以下是Java 隨機取字符串的對象類正文


1、Java隨機數的發生方法

   在Java中,隨機數的概念從狹義大將,有三種。
   1、經由過程System.currentTimeMillis()來獲得一個以後時光毫秒數的long型數字。
   2、經由過程Math.random()前往一個0到1之間的double值。
   3、經由過程Random類來發生一個隨機數,這個是專業的Random對象類,功效壯大。

2、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 種子設置此隨機數生成器的種子。

3、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);

4、綜合運用

  上面經由過程比來寫的一個隨機數對象類來展現用法:


   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

6、總結

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved