web-dev-qa-db-ja.com

Java)で英数字のランダム文字列を生成する

別の回答からStringBuilderを使用していますが、英数字、空白、句読点など以外は使用できません。このコードで文字セットを制限する方法を説明できますか?また、常に30文字の長さであることを保証するにはどうすればよいですか?

     Random generator = new Random();
    StringBuilder stringBuilder = new StringBuilder();
    int Length = 30;
    char tempChar ;
    for (int i = 0; i < Length; i++){
        tempChar = (char) (generator.nextInt(96) + 32);
        stringBuilder.append(tempChar);

私は他のほとんどの答えを見てきましたが、これに対する解決策を見つけることができません。ありがとう。これが重複している場合は、私に怒鳴らないでください。ほとんどの回答は、コードのどの部分が生成された数値の長さや文字セットを調整する場所を制御するかを説明していません。

StringBuilder.Replace( ''、 '1')も試しましたが、これは機能した可能性がありますが、EclipseはStringBuilderのReplaceのメソッドがないと言っています。

8
PrivusGuru

文字セットと長さを制御したい場合は、たとえば

public static String randomString(char[] characterSet, int length) {
    Random random = new SecureRandom();
    char[] result = new char[length];
    for (int i = 0; i < result.length; i++) {
        // picks a random index out of character set > random character
        int randomCharIndex = random.nextInt(characterSet.length);
        result[i] = characterSet[randomCharIndex];
    }
    return new String(result);
}

と組み合わせる

char[] CHARSET_AZ_09 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();

文字セットを指定します。

長さがわかっていて、すべてのオーバーヘッドを必要としないため、StringBuilderに基づいていません。

正しいサイズのchar[]配列を割り当て、その配列の各セルに入力配列からランダムに選択された文字を入力します。

ここで使用するその他の例: http://ideone.com/xvIZcd

22
zapl

これが私が使うものです:

public static String randomStringOfLength(int length) {
    StringBuffer buffer = new StringBuffer();
    while (buffer.length() < length) {
        buffer.append(uuidString());
    }

    //this part controls the length of the returned string
    return buffer.substring(0, length);  
}


private static String uuidString() {
    return UUID.randomUUID().toString().replaceAll("-", "");
}
2
aroth

あなたはこれを試すことができます:

    //piece
    int i = 0;
    while(i < length){
      char temp =(char) (generator.nextInt(92)+32);
      if(Character.isLetterOrDigit(temp))
      {
        stringBuilder.append(temp);
        ++i;
      }
    }
    System.out.println(stringBuilder);

あなたの目標を達成する必要があります

0
Sello