Java - Hasilkan Rentetan Rawak

Dalam tutorial ini, kita akan menunjukkan cara menghasilkan rentetan rawak di Java - pertama menggunakan perpustakaan Java standard, kemudian menggunakan varian Java 8, dan akhirnya menggunakan perpustakaan Apache Commons Lang.

Artikel ini adalah sebahagian daripada siri "Java - Back to Basic" di Baeldung.

1. Hasilkan Rentetan Tidak Berikat Secara Rawak Dengan Java Plain

Mari mulakan yang ringkas dan hasilkan String rawak yang terikat kepada 7 aksara:

@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 bahawa rentetan baru tidak akan menjadi alfanumerik dari jauh.

2. Hasilkan Rentetan Berikat Rawak Dengan Java Plain

Seterusnya - mari lihat membuat rentetan rawak yang lebih terkawal; kita akan menghasilkan Rentetan rawak dengan menggunakan huruf abjad kecil dan panjang set:

@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. Hasilkan Rentetan Abjad Rawak Dengan Java 8

Sekarang, mari kita gunakan Random.ints - ditambahkan dalam JDK 8 - untuk menghasilkan Rentetan abjad :

@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. Hasilkan Rentetan Alphanumerik Rawak Dengan Java 8

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

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() 

Perhatikan penggunaan kaedah penapis di atas untuk meninggalkan watak Unicode antara 65 dan 90 - untuk mengelakkan watak di luar jangkauan.

5. Hasilkan Rentetan Rawak Terikat Dengan Apache Commons Lang

Perpustakaan Commons Lang dari Apache banyak membantu dengan menghasilkan rentetan rawak. Mari kita lihat menghasilkan String terikat dengan menggunakan huruf sahaja :

@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 - bukannya semua kod tahap rendah dalam contoh Java - yang satu ini dilakukan dengan satu pelapik sederhana.

6. Hasilkan Rentetan Abjad Dengan Apache Commons Lang

Contoh lain yang sangat mudah - kali ini String terikat dengan hanya huruf abjad, tetapi tanpa memasukkan boolean flag ke API:

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

7. Hasilkan Rentetan Alphanumerik Dengan Apache Commons Lang

Dan akhirnya - Rentetan terikat rawak yang sama tetapi kali ini - angka:

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

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

8. Kesimpulannya

Melalui kaedah pelaksanaan yang berbeza, kami dapat menghasilkan rentetan 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 perkara yang perlu disebutkan adalah bahawa ia tidak selamat secara kriptografi. Pertimbangkan untuk menggunakan java.security.SecureRandom sebagai ganti untuk aplikasi sensitif keselamatan.

Pelaksanaan semua contoh dan coretan ini boleh didapati dalam projek GitHub. Ini adalah projek berasaskan Maven sehingga mudah diimport dan dijalankan.