1

Secure Random を使用して、Java で大文字の AZ 間の文字列を生成しようとしています。現在、特殊文字を含む英数字の文字列を生成できますが、大文字のアルファベットのみの文字列が必要です。

  public String createRandomCode(int codeLength, String id){   
     char[] chars = id.toCharArray();
        StringBuilder sb = new StringBuilder();
        Random random = new SecureRandom();
        for (int i = 0; i < codeLength; i++) {
            char c = chars[random.nextInt(chars.length)];
            sb.append(c);
        }
        String output = sb.toString();
        System.out.println(output);
        return output ;
    } 

入力パラメーターは、出力文字列の長さと英数字文字列である ID です。大文字のアルファベット文字列のみを生成するために上記のコードにどのような変更を加える必要があるか理解できません。助けてください..

4

3 に答える 3

3

メソッドは、id引数からランダムに文字を選択します。それらを大文字のみにしたい場合は、それらの文字を含む文字列を渡します。

String randomCode = createRandomCode(length, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");

編集重複を避けたい場合は、ランダムに文字を選択することはできません。それらをシャッフルして、最初のn文字を選択します。

public String createRandomCode(int codeLength, String id) {   
    List<Character> temp = id.chars()
            .mapToObj(i -> (char)i)
            .collect(Collectors.toList());
    Collections.shuffle(temp, new SecureRandom());
    return temp.stream()
            .map(Object::toString)
            .limit(codeLength)
            .collect(Collectors.joining());
}

EDIT 2楽しみのために、元のランダムコードジェネレーターを実装する別の方法を次に示します(重複を許可します):

public static String createRandomCode(int codeLength, String id) {
    return new SecureRandom()
            .ints(codeLength, 0, id.length())
            .mapToObj(id::charAt)
            .map(Object::toString)
            .collect(Collectors.joining());
}
于 2016-08-30T08:31:26.123 に答える
0

文字 A から Z に int 範囲を使用するメソッドの例を次に示します (また、このメソッドは 内の文字の重複を回避しますString)。

public String createRandomCode(final int codeLength) {

    int min = 65;// A
    int max = 90;// Z


    StringBuilder sb = new StringBuilder();
    Random random = new SecureRandom();

    for (int i = 0; i < codeLength; i++) {

        Character c;

        do {

            c = (char) (random.nextInt((max - min) + 1) + min);

        } while (sb.indexOf(c.toString()) > -1);

        sb.append(c);
    }

    String output = sb.toString();
    System.out.println(output);
    return output;
}

範囲の部分は、このトピックから来ています:特定の範囲でランダムな整数を生成する

于 2016-08-30T08:23:22.130 に答える