用 Java 生成隨機字串

K. Macharia 2023年10月12日
  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