10

別の回答の String Builder を使用していますが、英数字、空白、句読点など以外は使用できません。このコードで文字セットを制限する方法を説明できますか? また、常に 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 のメソッドがないと言っています。

4

3 に答える 3

26

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

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

于 2013-08-06T01:06:41.477 に答える
0

これを試すことができます:

    //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);

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

于 2013-08-06T00:04:57.167 に答える