Java でランダムな文字列を生成する

K. Macharia 2023年10月12日
  1. Java で正規表現を使用してランダム文字列を生成する
  2. Java で Math.random() メソッドを使用してランダムな英数字の文字列を生成する
  3. Charset を使った生成
  4. Apache CommonsLang を使用する
Java でランダムな文字列を生成する

英数字の文字列には、数字とアルファベットが含まれます。Java では、英数字の文字列が使用される場合が数多くあります。たとえば、ユーザーがアプリケーションに登録した後にパスワードを生成する場合。データベース内の要素を識別するための主キーエントリの生成。とりわけ、セッション ID の生成。

この記事では、Java でランダムな英数字の文字列を生成する 4つの方法について説明します。

  1. 正規表現
  2. Math.random() メソッド
  3. Charset メソッド
  4. Apache Commons Lang

Java で正規表現を使用してランダム文字列を生成する

この方法は簡単で、大文字と小文字を含む英数字の文字列を提供します。

最初に行うことは、0 から 256 の間の文字を取ることです。

2 番目のステップは、ランダムな文字列に含める要素を残す文字をフィルタリングすることです。残しておきたい文字は 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() メソッドを使用してランダムな英数字の文字列を生成する

これには、可能なすべての文字を含む文字列を手動で作成することが含まれます。次に、前に作成した文字列から文字と数字を選択して、定義された長さのランダムな文字列を作成します。

まず、必要な 2つの変数 StringBuilderString を定義しました。String には、アルファベットのすべての文字が大文字で、0〜9 の数字が含まれます。文字列内の文字のインデックスは文字をランダムに選択するために使用されるため、この文字列には記号やスペースを含めないでください。

次に、作成するランダムな文字列の長さに制限される反復を定義します。

3つ目は、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 を使った生成

java.nio.charset パッケージに含まれている Charset を使用します。文字セットは文字セットを表し、文字と数字の間のマッピングを表します。Charset を使用して英数字の文字列を作成するプロセスを以下に説明します。

最初のステップは、0 から 256 までの文字を取得することです。次に、Random() メソッドが上記の文字の配列に適用されます。3 番目のステップは、各文字がアルファベットか数字かを繰り返しチェックすることです。どちらかである場合は、定義された長さに達するまで、その文字を文字列の最後に追加します。StringBuilder に追加された文字は、toString() メソッドを使用して目的の文字列に変換されます。

以下はサンプルコードです。

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 CommonsLang を使用する

サードパーティが実装(この場合は Apache パッケージ)を処理するため、これは実装が最も簡単な方法です。

Apache Commons Lang パッケージは、Java での文字列操作に関連する多くのヘルパーユーティリティを提供します。サードパーティであるため、最初にプロジェクトの依存関係として追加する必要があります。

RandomStringUtils クラスを使用してランダムな文字列を生成できますこのクラスには、ランダムな文字列を与えることができる 3つのメソッドがあります。

  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