Soru Java'da A-Z ve 0-9 ile rastgele bir dizi oluşturma [duplicate]


Bu sorunun zaten bir cevabı var:

Başlığın önerdiğine göre, 17 karakterden oluşan bir rasgele ID oluşturmam gerekiyor. Gibi bir şey "AJB53JHS232ERO0H1"Harf ve rakamların sırası da rasgele. A-Z harfleri ve" çek "değişkenleri içeren bir dizi oluşturmayı düşündüm. 1-2. Ve bir döngüde;

Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.

Ama bunu yapmanın daha kolay bir yolu varmış gibi hissediyorum. Var mı?


42
2017-12-12 06:33


Menşei


stackoverflow.com/questions/41107/... - aquaraga
Harflerinizi ve rakamlarınızı bir diziye ekleyebilir ve sonra istediğiniz boyuta ulaşana kadar rastgele bir şekilde öğeleri seçebilirsiniz. - wxyz


Cevaplar:


Burada Random String oluşturmak için yöntemimi kullanabilirsiniz

protected String getSaltString() {
        String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt = new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.charAt(index));
        }
        String saltStr = salt.toString();
        return saltStr;

    }

Çantamdan yukarıdaki yöntem giriş amacı için bir tuz dizesi oluşturmak için kullanıyor.


76
2017-12-12 06:36



Değiştirmeyi önerebilir miyim StringBuffer tarafından StringBuilder, bir iş parçacığı-güvenli impl gerek yok. İşte
Veya sadece bir char[] ne kadar uzun olacağını bildiğine göre. Hiçbir şey eklemenize gerek yok. Bende kullanırdım Random.nextInt aramak yerine nextFloat ve uzunluğu ile çarparak. - Jon Skeet
Ortalama sayıların harflerin miktarı ile aynı olmayacağını unutmayın. - Martijn Courteaux
@RC. Evet. Bir servlet ortamında kullanıyorum. Yani buna ihtiyacım var. Aksi halde bir StringBuilder - ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ
Bunu, sınıfımdaki statik bir yöntem olarak ekledim ve her şey yolunda :) Thx ... - kodmanyagha


RandomStringUtils Apache commons-lang den yardımcı olabilir:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()

2017 güncellemesi: RandomStringUtils kullanımdan kaldırıldı, şimdi kullanmalısınız RandomStringGenerator.


58
2017-12-12 06:35



Yanıtın Apache ile değiştirilmesiyle güncellenmesini düşünün. RandomStringGenerator Ortak metin içinde. - Neria Nachum


Fonksiyonunuzu uygulamak için üç adım:

Aşama 1 A-Z ve 0-9 karakterleri dahil olmak üzere bir dize belirtebilirsiniz.

Sevmek.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Adım 2 Daha sonra bu aday diziden rasgele bir char oluşturmak istiyorsanız. Kullanabilirsiniz

 candidateChars.charAt(random.nextInt(candidateChars.length()));

Aşama 3 Sonunda, oluşturulacak rastgele dizginin uzunluğunu belirtin (açıklamanızda, 17'dir). Bir for-döngüsü yazar ve adım # 2 StringBuilder nesnesinde oluşturulan rastgele chars ekleyin.

Buna dayanarak, burada bir örnek     public class RandomTest {

public static void main(String[] args) {

    System.out.println(generateRandomChars(
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 17));
}

/**
 * 
 * @param candidateChars
 *            the candidate chars
 * @param length
 *            the number of random chars to be generated
 * 
 * @return
 */
public static String generateRandomChars(String candidateChars, int length) {
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
        sb.append(candidateChars.charAt(random.nextInt(candidateChars
                .length())));
    }

    return sb.toString();
}

}

8
2017-12-12 06:49





Bunu bir for döngüsüyle kolayca yapabilirsiniz.

public static void main(String[] args) {
  String aToZ="ABCD.....1234"; // 36 letter.
  String randomStr=generateRandom(aToZ);

}

private static String generateRandom(String aToZ) {
    Random rand=new Random();
    StringBuilder res=new StringBuilder();
    for (int i = 0; i < 17; i++) {
       int randIndex=rand.nextInt(aToZ.length()); 
       res.append(aToZ.charAt(randIndex));            
    }
    return res.toString();
}

3
2017-12-12 06:40