Search code examples
javarandomhashtable

How to generate random string and put it in HashTable?


I want to generate a random unique String and put in hashtable. I did like below code but it is not unique and it is just One Character .

while(k<4){
    for(int j=1 ; j<=13 ;j++){
        Hashtable<Integer, String> Deck = new Hashtable();  
        int myChar = (int) (Math.random()*str.length());
        StringBuilder sb = new StringBuilder();
        sb.append(str.charAt(myChar)); 

        int i = (int) (Math.random() *52) ; 
        Deck.put(i, sb.toString());
        System.out.print(Deck);
    }

    System.out.println();
    k++;
}

output is this

{30=d}{9=e}{11=b}{10=d}{43=g}....

I want to be

{30=dea}{9=egt}{11=brf}{10=dgrtg}{43=grrh}{14=gwrt}.....

Solution

  • You can use Apache Commons Lang to generate an alphabetic string

    String generatedString = RandomStringUtils.randomAlphanumeric(10);
    

    Try something like this

        Hashtable<Integer, String> Deck = new Hashtable();
    
        for (int i = 0; i < 10; i++) {
            String generatedString = RandomStringUtils.randomAlphanumeric(10);
            int key = (int) (Math.random() *52) ;
            Deck.put(key, generatedString);
        }
        System.out.println(Deck);
    

    OutPut

    {9=Ut7N87oMNp, 8=7kbARh5WIy, 7=pbU2ZCOGK1, 6=vAGAIw41Us, 5=VLnpY1FAuN, 4=UEIJNIvZlt, 3=z6Y3zXcDY1, 2=PxaMqXl8XW, 1=l72bkPdY6T, 0=FFdOsKpQgd}
    

    If you want only Alphabets then use RandomStringUtils.randomAlphabetic(10); instaed of RandomStringUtils.randomAlphanumeric(10).

    If you dont want third party api, then its your code snippet with some changes

    while (k < 4) {
            for (int j = 1; j <= 13; j++) {
                Hashtable<Integer, String> Deck = new Hashtable();
                StringBuilder sb = new StringBuilder();
                int cnt = 0;
                while (cnt++ != 10) {
                    int myChar = (int) (Math.random() * str.length());
                    sb.append(str.charAt(myChar));
                }
                int i = (int) (Math.random() * 52);
                Deck.put(i, sb.toString());
                System.out.print(Deck);
            }
    
            System.out.println();
            k++;
        }
    

    Added while loop only...