Generate random String trong Java

Để generate một String ngẫu nhiên trong Java có rất nhiều cách, qua bài viết này chúng ta sẽ cùng nhau tìm hiểu một số cách thường được áp dụng. 

Generate random String

Trong phần này, chúng ta sẽ tìm cách generate một string với số lượng ký tự xác định. Tuy nhiên những ký tự trong String có thể là bất cứ thứ gì chẳng hạn như chữ cái alphabet, chữ số, ký tự đặc biệt, v.v.

Ví dụ generate random string với số lượng 10 ký tự.

import java.nio.charset.Charset;
import java.util.Random;

public class Main {

    public static void main(String[] args) {
        int len = 10; // Độ dài của String random
        byte[] array = new byte[len];
        new Random().nextBytes(array);
        String generatedString = new String(array, Charset.forName("UTF-8"));
        System.out.println("Random string: " + generatedString);
    }

}

Generate random alphabet String

Ở phần trên, chúng ta sẽ nhận lại một string với các ký tự trong string là bất kỳ, bây giờ nếu chúng ta muốn generate ra một string chỉ chứa toàn chữ cái alphabet.

import java.util.Random;

public class Main {

    public static void main(String[] args) {
        int leftLimit = 97; // letter 'a'
        int rightLimit = 122; // letter 'z'
        int len = 10;
        Random random = new Random();
        StringBuilder buffer = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            int randomLimitedInt = leftLimit + (int)
                    (random.nextFloat() * (rightLimit - leftLimit + 1));
            buffer.append((char) randomLimitedInt);
        }
        String generatedString = buffer.toString();

        System.out.println("Random String: " + generatedString);
    }

}

Từ Java 8 trở đi thì chúng ta có thể sử dụng Random.ints để generate alphabet string.

import java.util.Random;

public class Main {

    public static void main(String[] args) {
        int leftLimit = 97; // letter 'a'
        int rightLimit = 122; // letter 'z'
        int len = 10;
        Random random = new Random();

        String generatedString = random.ints(leftLimit, rightLimit + 1)
                .limit(len)
                .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
                .toString();

        System.out.println("Random String: " + generatedString);
    }

}

Nếu project của các bạn đang sử dụng thư viện Apache Commons Lang 3 thì thư viện này đã cung cấp sẵn RandomStringUtils class cho phép generate ra alphabet string thông qua method RandomStringUtils.randomAlphabetic().

import org.apache.commons.lang3.RandomStringUtils;

public class Main {

    public static void main(String[] args) {
        String generatedString = RandomStringUtils.randomAlphabetic(10);
        System.out.println("Random String: " + generatedString);
    }

}

Generate Alphanumeric String

Trong trường hợp chúng ta muốn generate ra một string bao gồm các chữ cái và số thì có thể làm như sau

public class Main {

    public static void main(String[] args) {
        int leftLimit = 48; // numeral '0'
        int rightLimit = 122; // letter 'z'
        int len = 10;
        Random random = new Random();

        String generatedString = random.ints(leftLimit, rightLimit + 1)
                .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
                .limit(len)
                .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
                .toString();


        System.out.println("Random String: " + generatedString);
    }

}

Tiếp tục, nếu project đang có sẵn RandomStringUtils.randomAlphanumeric() cho phép generate string bao gồm các chữ cái và số nhanh chóng. 

import org.apache.commons.lang3.RandomStringUtils;

public class Main {

    public static void main(String[] args) {
        String generatedString = RandomStringUtils.randomAlphanumeric(10);
        System.out.println("Random String: " + generatedString);
    }

}

Tóm lược

Qua bài biết này chúng ta đã tìm hiểu được một số cách để generate random String trong Java. Ngoài việc sử dụng Java thuần để triển khai thì chúng ta có thể sử dụng Apache commons lang 3 để làm điều tương tự như code sẽ ngắn gọn hơn rất nhiều.

Nguồn tham khảo

https://www.baeldung.com/java-random-string

https://stackoverflow.com/questions/46704787/generate-a-random-string-in-java

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x