用 Java 生成隨機字串

K. Macharia 2023年1月30日 2021年3月21日
  1. 在 Java 中使用正規表示式生成隨機字串
  2. 在 Java 中使用 Math.random() 方法生成隨機字母數字字串
  3. 使用 Charset 生成
  4. 使用 Apache Commons Lang
用 Java 生成隨機字串

字母數字字串包含數字和字母字元。在 Java 中,在許多情況下都使用字母數字字串。例如,在使用者註冊應用程式後生成密碼;在生成主鍵條目以標識資料庫中的元素時;生成會話 ID 等。

本文將討論四種在 Java 中生成隨機字母數字字串的方法。

  1. 正規表示式
  2. Math.random() 方法
  3. Charset
  4. Apache Commons Lang

在 Java 中使用正規表示式生成隨機字串

此方法很簡單,給出了一個包含小寫字元和數字的大寫字母數字字串。

第一步是取 0 到 256 之間的字元。

第二步是過濾這些字元,留下我們想要包含在隨機字串中的元素。請記住,我們想要留下的字元是 0-9 和 A-Z,所以我們可以建立一個過濾器來刪除所有其他的字元。

下一步是選擇隨機字元並將它們新增到 StringBuffer 中。然後我們使用 toString() 方法從 StringBuffer 中建立一個字串。

下面是一個示例程式碼。

import java.nio.charset.*;
import java.util.*;

class GenerateAlphaNumericString {
    static String getRandomString(int i) 
    {
    
        // bind the length 
        bytearray = new byte[256];         byte[] bytearray;
        String mystring;
        StringBuffer thebuffer;
        String theAlphaNumericS;

        new Random().nextBytes(bytearray); 

        mystring 
            = new String(bytearray, Charset.forName("UTF-8")); 
            
        thebuffer = new StringBuffer();
        
        //remove all spacial char 
        theAlphaNumericS 
            = mystring 
                .replaceAll("[^A-Z0-9]", ""); 

        //random selection
        for (int m = 0; m < theAlphaNumericS.length(); m++) {

            if (Character.isLetter(theAlphaNumericS.charAt(m)) 
                    && (i > 0) 
                || Character.isDigit(theAlphaNumericS.charAt(m)) 
                    && (i > 0)) {

                thebuffer.append(theAlphaNumericS.charAt(m)); 
                i--; 
            } 
        } 

        // the resulting string 
        return thebuffer.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    } 
}

輸出:

A random string: 4H4V7FWP8ZUKEGW

在 Java 中使用 Math.random() 方法生成隨機字母數字字串

它涉及手動建立一個包含所有可能字元的字串。然後,通過從先前建立的字串中選擇字元和數字,來建立一個定義長度的隨機字串。

首先,我們定義了我們需要的兩個變數-StringBuilderStringString 將包含所有大寫字母和數字 0-9。該字串不應有符號或空格,因為該字串中字元的索引將用於隨機選擇字元。

其次,定義限於我們要建立的隨機字串的長度的迭代。

第三,使用 Math.random() 方法生成一個隨機索引。從先前建立的字串中獲取字元,該字元是隨機生成的索引位置,並將其附加到 StringBuilder。然後,我們可以使用 toString() 方法從 StringBuilder 中獲取隨機字串。

下面是一個示例程式碼。

class AlphaNumericStringGenerator {
    static String getRandomString(int i) 
    {
        String theAlphaNumericS;
        StringBuilder builder;
        
        theAlphaNumericS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                    + "0123456789"; 

        //create the StringBuffer
        builder = new StringBuilder(i); 

        for (int m = 0; m < i; m++) {

            // generate numeric
            int myindex 
                = (int)(theAlphaNumericS.length() 
                        * Math.random()); 

            // add the characters
            builder.append(theAlphaNumericS 
                        .charAt(myindex)); 
        } 

        return builder.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    }
} 

輸出:

A random string: BCQJPZLG3OC1MQD

使用 Charset 生成

我們使用 Charset,它位於 java.nio.charset 包中。字符集代表字符集,並表示字元和數字之間的對映。下面說明使用 Charset 建立字母數字字串的過程。

第一步是獲取 0 到 256 之間的字元。然後將 Random() 方法應用於上面的字元陣列。第三步是通過迭代檢查每個字元是字母還是數字。如果是它們中的任何一個,我們都將該字元新增到字串的末尾,直到達到定義的長度。使用 toString() 方法將附加在 StringBuilder 上的字元轉換為所需的字串。

下面是一個示例程式碼。

import java.nio.charset.*;
import java.util.*; 

class AlphaNumericStringGenerator {
    static String getRandomString(int i) 
    {

        byte[] bytearray;
        String mystring;
        StringBuffer thebuffer;
        
        bytearray = new byte[256]; 
        new Random().nextBytes(bytearray); 

        mystring 
            = new String(bytearray, Charset.forName("UTF-8")); 

        // Create the StringBuffer
        thebuffer = new StringBuffer(); 

        for (int m = 0; m < mystring.length(); m++) {

            char n = mystring.charAt(m); 

            if (((n >= 'A' && n <= 'Z') 
                || (n >= '0' && n <= '9')) 
                && (i > 0)) {

                thebuffer.append(n); 
                i--; 
            } 
        } 

        // resulting string 
        return thebuffer.toString(); 
    } 

    public static void main(String[] args) 
    {
        // the random string length
        int i = 15; 

        // output 
        System.out.println("A random string: " +  getRandomString(i)); 
    }
}

輸出:

A random string: XKT0JAHPRPZ6A3X

使用 Apache Commons Lang

這是最容易實現的方法,因為由第三方來處理實現,在這種情況下是 Apache 程式包。

Apache Commons Lang 軟體包提供了許多與 Java 中的字串操作有關的幫助程式實用程式。由於它是第三方,因此必須首先將其新增為專案中的依賴項。

我們可以使用 RandomStringUtils 類來生成隨機字串。此類有三種可以提供隨機字串的方法:

  1. RandomStringUtils.randomNumeric:建立一個指定長度的隨機字串。
  2. RandomStringUtils.randomAlphabetic:建立一個隨機的字母字串,包含大小寫字元
  3. RandomStringUtils.randomAlphanumeric:建立具有指定長度的隨機字母數字字串。

下面是一個程式碼示例。

import org.apache.commons.lang3.RandomStringUtils;

public class Index {
    public static void main(String[] args){
        System.out.println(RandomStringUtils.randomAlphanumeric(15)toUpperCase(););
    }
}

輸出:

RM0WMYOKN7AS0KA

RandomStringUtils.randomAlphanumeric 直接實現隨機字母數字,並且可以選擇使用小寫字母或大寫字母或同時使用兩者。當你不想在程式碼中實現字串生成時,這是一種有效的方法。Apache 庫功能強大,並具有其他許多功能,例如基本的數值方法,併發性和物件反射。

相關文章 - Java String