2

このフォームを持つランダムな文字列を生成したい

[A-Za-z0-9]{5,10}

方法がわかりません。正規表現またはランダム関数を使用する必要がありますか?

4

4 に答える 4

1

(Java で) 正規表現を使用して生成することはできません。

「乱数」ジェネレーター (Randomクラスなど) を使用して、(指定されたセット内の) ランダムな文字の乱数 (5 から 10 の間) を生成する必要があります。実際、Java は複数のジェネレーターを提供しています...ランダム性がいかに重要か。(このRandomクラスは単純な疑似乱数生成アルゴリズムを使用しており、生成される数値はかなり予測可能です...)

これは「学習演習」だと思うので、コードは提供しません。(そして、それが学習演習でない場合は、とにかく自分で書くことができるはずです...)

于 2013-05-01T11:16:42.277 に答える
1

この場合、次のようなJavaソリューションに固執します。

private String allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGRHIJKLMNOPQRSTUVWXYZ0123456789";

public String getRandomValue(int min, int max) {
    Random random = new Random();
    int length = random.nextInt(max - min + 1) + min;
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < length; i++) {
        sb.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
    }
    return sb.toString();
}

これを呼び出すことができますgetRandomValue(5, 10);

利用可能なIDEがないため、このコードは試していません

サードパーティのライブラリを使用することに慣れていない場合は、利用可能なライブラリが多数あることに注意してください。

于 2013-05-01T11:20:39.517 に答える
0

Apache の commons-lang ライブラリにある RandomStringUtils.randomAlphanumeric(int count) を使用して、毎回異なるカウント引数 (5 から 10) を指定できます。

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/RandomStringUtils.html#randomAlphanumeric%28int%29

于 2013-05-01T11:20:26.567 に答える
0

正規表現を使用してランダムな文字列を生成することはできません。正規表現は、テキスト、文字、単語のパターンを指定して認識する方法です。次のコードを使用して、ランダムな文字列を生成できます。

 public static String createRandomString(int length)
    {
        String randomString = "";
        String lookup[] = null;
        int upperBound = 0;
        Random random = new Random();

        lookup = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        upperBound = 36;

        for (int i = 0; i < length; i++)
        {
            randomString = randomString + lookup[random.nextInt(upperBound)];
        }

        return randomString;
    }
于 2013-05-01T11:32:34.060 に答える