Java - Hasilkan String Acak

Dalam tutorial ini, kami akan menunjukkan cara membuat string acak di Java - pertama menggunakan pustaka Java standar, lalu menggunakan varian Java 8, dan terakhir menggunakan pustaka Apache Commons Lang.

Artikel ini adalah bagian dari seri “Java - Kembali ke Dasar” di Baeldung.

1. Hasilkan String Tanpa Batas Acak Dengan Java Biasa

Mari mulai dengan sederhana dan buat String acak yang dibatasi 7 karakter:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { byte[] array = new byte[7]; // length is bounded by 7 new Random().nextBytes(array); String generatedString = new String(array, Charset.forName("UTF-8")); System.out.println(generatedString); }

Perlu diingat bahwa string baru tidak akan berupa alfanumerik jarak jauh.

2. Hasilkan String Berbatas Acak Dengan Java Biasa

Berikutnya - mari kita lihat cara membuat string acak yang lebih dibatasi; kita akan menghasilkan String acak menggunakan huruf alfabet huruf kecil dan panjang yang ditetapkan:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() { int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); StringBuilder buffer = new StringBuilder(targetStringLength); for (int i = 0; i < targetStringLength; i++) { int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); buffer.append((char) randomLimitedInt); } String generatedString = buffer.toString(); System.out.println(generatedString); }

3. Menghasilkan String Alfabet Acak Dengan Java 8

Sekarang, mari gunakan Random.ints - ditambahkan di JDK 8 - untuk menghasilkan String alfabet :

@Test public void givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect() { int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); }

4. Menghasilkan String Alfanumerik Acak Dengan Java 8

Dan kemudian kita dapat memperluas kumpulan karakter kita untuk mendapatkan String alfanumerik :

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() 

Perhatikan penggunaan metode filter di atas untuk menghilangkan karakter Unicode antara 65 dan 90 - untuk menghindari karakter di luar jangkauan.

5. Hasilkan String Acak Terikat Dengan Apache Commons Lang

Perpustakaan Commons Lang dari Apache sangat membantu dengan pembuatan string acak. Mari kita lihat cara menghasilkan String yang dibatasi hanya dengan menggunakan huruf :

@Test public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect() { int length = 10; boolean useLetters = true; boolean useNumbers = false; String generatedString = RandomStringUtils.random(length, useLetters, useNumbers); System.out.println(generatedString); }

Jadi - alih-alih semua kode tingkat rendah dalam contoh Java - yang ini dilakukan dengan satu baris sederhana.

6. Buat String Abjad Dengan Apache Commons Lang

Contoh lain yang sangat sederhana - kali ini String yang dibatasi hanya dengan karakter alfabet, tetapi tanpa meneruskan flag boolean ke dalam API:

@Test public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() { String generatedString = RandomStringUtils.randomAlphabetic(10); System.out.println(generatedString); }

7. Hasilkan String Alfanumerik Dengan Apache Commons Lang

Dan akhirnya - String berbatas acak yang sama tetapi kali ini - numerik:

@Test public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() { String generatedString = RandomStringUtils.randomAlphanumeric(10); System.out.println(generatedString); }

Dan di sana kami memilikinya - membuat string terikat dan tidak terbatas dengan Java biasa, varian Java 8, atau Perpustakaan Apache Commons.

8. Kesimpulan

Melalui metode implementasi yang berbeda, kami dapat menghasilkan string terikat dan tidak terikat, menggunakan Java biasa, varian Java 8, atau Perpustakaan Apache Commons.

Dalam contoh Java ini, kami telah menggunakan java.util.Random , tetapi satu hal yang perlu disebutkan adalah bahwa ini tidak aman secara kriptografis. Pertimbangkan untuk menggunakan java.security.SecureRandom sebagai gantinya untuk aplikasi yang sensitif terhadap keamanan.

Penerapan semua contoh dan cuplikan ini dapat ditemukan di proyek GitHub. Ini adalah proyek berbasis Maven sehingga harus mudah untuk diimpor dan dijalankan.