2011-04-15 20 views
31
rastgele dize oluşturmak için nasıl

Olası Çoğalt:
How to generate a random String in Java20 karakter

ben apache sınıfları kullanmadan 20 karakterli rastgele dize oluşturmak isteyen. Alfasayısal olup olmama umurumda değil. Ayrıca, daha sonra FYI bir dizi bayt dönüştürmek için gidiyorum. Eğer bir bayt [] Bunu yapabileceğini istiyorsanız

String randomString(final int length) { 
    Random r = new Random(); // perhaps make it a class variable so you don't make a new one every time 
    StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < length; i++) { 
     char c = (char)(r.nextInt((int)(Character.MAX_VALUE))); 
     sb.append(c); 
    } 
    return sb.toString(); 
} 

: Ben bu yaklaşımı kullanmayı tercih ediyorum

+3

Tamam. Peki şimdiden ne denedin? . Bir paralel olarak –

+2

.:. UUID.randomUUID() toString() yerine ("-", "") substring (0,20) – Nolf

+2

Bu 3 tek hat kodları i tahmin çok yararlıdır .. 'Long.toHexString (Double.doubleToLongBits (Math.random())); 'UUID.randomUUID(). ToString();' 'RandomStringUtils.randomAlphanumeric (20); – Manindar

cevap

81

İşte başlıyorsunuz. İlk satırda izin vermek istediğiniz karakterleri belirtmeniz yeterlidir.

char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 
StringBuilder sb = new StringBuilder(20); 
Random random = new Random(); 
for (int i = 0; i < 20; i++) { 
    char c = chars[random.nextInt(chars.length)]; 
    sb.append(c); 
} 
String output = sb.toString(); 
System.out.println(output); 
+1

bu iyi bir yöntem değil ... yüz rastgele no. ama çok azı benzersizdi. Bu kodu bir süre döngüsüne koyup 0'dan 99'a kadar yineledim. Birçok çıktı tekrarlandı .. – Nikhil

+0

@Nikhil Yanlış bir şey yaptığınızdan şüpheleniyorum. Daha iyi bir rasgele sayı kaynağına ihtiyacınız varsa, bunun yerine 'SecureRandom''u deneyin. Bu durumda yinelenen için, bu durumda, yukarıdaki kod üzerinde döngü, bu 100 benzersiz dizeleri var: http://pastebin.com/ELZ950tk – WhiteFang34

+0

@ WhiteFang34 Merhaba, Bu kodu bir MIDlet denedim. Bunun bir masaüstü java uygulamasında iyi çalıştığını düşünüyorum. Sonuçlarımı buradan kontrol edebilirsiniz: http: //pastebin.com/yDcT41g8. Yani bir MIDlet içinde kullandığınızda, tekrarlanan dizeleri alırsınız. Yaptığım tek değişiklik StringBuffer yerine StringBuilder kullanmaktı. – Nikhil

11

sayesinde

byte[] randomByteString(final int length) { 
    Random r = new Random(); 
    byte[] result = new byte[length]; 
    for(int i = 0; i < length; i++) { 
     result[i] = r.nextByte(); 
    } 
    return result; 
} 

Yoksa bu

yapabileceğini
3
public String randomString(String chars, int length) { 
    Random rand = new Random(); 
    StringBuilder buf = new StringBuilder(); 
    for (int i=0; i<length; i++) { 
    buf.append(chars.charAt(rand.nextInt(chars.length()))); 
    } 
    return buf.toString(); 
} 
5

Sen ASCII olarak yorumlamak Byte, almak için yöntemin

char c = (char)(rnd.nextInt(128-32))+32 

20x ile sınıf java.util.Random kullanabilir. ASCII ile iyiysen.

32, karakterlerin genelde yazdırılabildiği noktadan uzaklıktır.

İlgili konular