2011-04-15 9 views
31
के एक यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए

संभव डुप्लिकेट:
How to generate a random String in Javaकैसे 20 वर्ण

मैं अपाचे कक्षाओं का उपयोग किए बिना 20 वर्णों के एक यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए इच्छुक हूँ। मुझे वास्तव में परवाह नहीं है कि अल्फान्यूमेरिक है या नहीं। इसके अलावा, मैं इसे बाद में एफवाईआई द्वारा बाइट्स की एक सरणी में बदलने जा रहा हूं।

धन्यवाद,

+3

ठीक है। तो आपने पहले से क्या प्रयास किया है? –

+2

एक पंक्ति में: UUID.randomUUID()। ToString()। प्रतिस्थापन ("-", "")। Substring (0,20) – Nolf

+2

ये 3 सिंगल लाइन कोड मुझे बहुत उपयोगी हैं .. 'Long.toHexString (Double.doubleToLongBits (Math.random())); 'UUID.randomUUID()। ToString();' 'RandomStringUtils.randomAlphanumeric (20);' – Manindar

उत्तर

81

यहां आप जाते हैं। बस उन वर्णों को निर्दिष्ट करें जिन्हें आप पहली पंक्ति पर अनुमति देना चाहते हैं।

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

यह एक अच्छी विधि नहीं है ... मैंने कोशिश करने की कोशिश की सौ यादृच्छिक संख्या। लेकिन बहुत कम अद्वितीय थे। मैंने इस कोड को थोड़ी देर लूप में रखा और 0 से 99 पुनरावृत्त किया। कई आउटपुट दोहराए गए .. – Nikhil

+0

@ निखिल मुझे संदेह है कि आपने कुछ गलत किया है। अगर आपको यादृच्छिक संख्याओं के बेहतर स्रोत की आवश्यकता है, तो इसके बजाय 'सुरक्षितरैंडम' का प्रयास करें। इस मामले में डुप्लिकेट के लिए इससे कोई फर्क नहीं पड़ता है, हालांकि, उपर्युक्त कोड पर लूपिंग मुझे इन 100 अद्वितीय तारों को मिला: http://pastebin.com/ELZ950tk – WhiteFang34

+0

@ व्हाइटफैंग 34 हाय, मैंने इस कोड को मिडलेट में आजमाया। मुझे लगता है कि यह डेस्कटॉप जावा एप्लिकेशन पर ठीक काम कर रहा है। आप यहां मेरे परिणाम देख सकते हैं: http: //pastebin.com/yDcT41g8। तो जब आप इसे मिडलेट में उपयोग करते हैं तो आपको बार-बार तार मिलते हैं। मेरे द्वारा किए गए एकमात्र परिवर्तन स्ट्रिंगबफर के बजाय स्ट्रिंगबफर का उपयोग करना था। – Nikhil

11

मैं इस दृष्टिकोण का उपयोग करेंगे:

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(); 
} 

आप एक बाइट [] क्या आप ऐसा कर सकते हैं चाहते हैं:

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; 
} 

या आप इस

कर सकता है
byte[] randomByteString(final int length) { 
    Random r = new Random(); 
    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().getBytes(); 
} 
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

आप बाइट्स, जो आप ASCII के रूप में समझ पाने के लिए विधि

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

20x के साथ वर्ग java.util.Random उपयोग कर सकते हैं। यदि आप ASCII के साथ ठीक हैं।

32 ऑफसेट है, जहां से अक्षर सामान्य रूप से प्रिंट करने योग्य होते हैं।

संबंधित मुद्दे