2

UUID.randomUUID() のような一意のサロゲート文字列を生成する方法はありますが、文字のみを含みます (数字がないことを意味します)? 文字列は異なるホスト上の複数のデータベースに格納され、システム全体で一意である必要があります (2 つのキーを同時に生成した場合でも、つまりスレッドによって)。

4

5 に答える 5

2

Apache Commons Lang 3RandomStringUtilsには、ランダムなアルファベット文字列を取得するために使用できるという名前のクラスがあります。

int stringSize = 8;  // just choose the size better suits you
String randomString = RandomStringUtils.randomAlphabetic(stringSize);

複数のスレッドが実行されている場合でもこれを一意にする必要がある場合は、それらを同期する方法 (おそらくsynchronizedブロックとwhileループを使用) と、生成されたものと等しい以前の文字列が存在しないことをそのデータベースでチェックする必要があります。

編集 - 大まかな例

Set<String> previousKeys = new HashSet<String>();

public String generateKey(int stringSize) {
    String randomString = "";
    synchronized(previousKeys) {
        do {
            randomString = RandomStringUtils.randomAlphabetic(stringSize);
        } while (randomString.length() == 0 || !previousKeys.add(randomString));
    }
    return randomString;
}
于 2012-08-31T12:44:38.233 に答える
1

これを書いただけです-大文字のランダムな文字列:

package dan;

import java.util.Random;

public class RandText {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String s = getRandomText(100);
        System.out.println(s);

    }


    public static String getRandomText(int len) {
        StringBuilder b = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i<len;i++) {
            char c = (char)(65+r.nextInt(25));
            b.append(c);
        }
        return b.toString();
    }
}
于 2012-08-31T12:43:15.660 に答える
0

ランダムな文字を生成する場合は、ランダム int ジェネレーターを使用して、65 ~ 122 の乱数を生成します。ただし、91 ~ 96 は AZ または ascii の az ではないことに注意してください。この int を char に変換する必要があることに注意してください。

これは役に立ちます: http://www.asciitable.com/

于 2012-08-31T12:44:41.673 に答える
0

UUID を取得し、「-」を取り除きます。文字 '1' -> 'Z'、'2' -> 'Y' などを変換します。

于 2012-08-31T12:55:02.723 に答える
0
String id = UUID.randomUUID().toString().replaceAll("-", "");
id.replaceAll("0","zero");
// [...]
id.replaceAll("9","nine");

私はこのアプローチに気分が悪い。

于 2012-08-31T12:49:02.417 に答える