ในบทช่วยสอนนี้เราจะแสดงวิธีสร้างสตริงแบบสุ่มใน Java โดยใช้ไลบรารี Java มาตรฐานก่อนจากนั้นใช้ตัวแปร Java 8 และสุดท้ายใช้ไลบรารี Apache Commons Lang
บทความนี้เป็นส่วนหนึ่งของซีรี่ส์“ Java - Back to Basic” ใน Baeldung
1. สร้างสตริงที่ไม่ถูกผูกแบบสุ่มด้วย Java ธรรมดา
เริ่มต้นง่ายๆและสร้างสตริงแบบสุ่มที่มีอักขระ 7 ตัว:
@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); }
โปรดทราบว่าสตริงใหม่จะไม่เป็นตัวเลขและตัวอักษรจากระยะไกล
2. สร้างสตริงที่ผูกแบบสุ่มด้วย Java ธรรมดา
ต่อไป - มาดูการสร้างสตริงสุ่มที่ จำกัด มากขึ้น เราจะสร้างสตริงสุ่มโดยใช้ตัวอักษรตัวพิมพ์เล็กและความยาวที่กำหนด:
@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. สร้างสตริงตัวอักษรแบบสุ่มด้วย Java 8
ตอนนี้เรามาใช้Random.ints - เพิ่มใน JDK 8 - เพื่อสร้างสตริงตัวอักษร:
@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. สร้างสตริงตัวอักษรและตัวเลขแบบสุ่มด้วย Java 8
จากนั้นเราสามารถขยายชุดอักขระของเราเพื่อให้ได้สตริงตัวอักษรและตัวเลข:
@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect()
สังเกตการใช้วิธีการกรองด้านบนเพื่อเว้นอักขระ Unicode ระหว่าง 65 ถึง 90 - เพื่อหลีกเลี่ยงอักขระนอกช่วง
5. สร้างสตริงสุ่มที่มีขอบเขตด้วย Apache Commons Lang
ไลบรารี Commons Lang จาก Apache ช่วยได้มากในการสร้างสตริงแบบสุ่ม ลองมาดูการสร้างสตริงที่มีขอบเขตโดยใช้ตัวอักษรเท่านั้น :
@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); }
ดังนั้น - แทนที่จะเป็นโค้ดระดับต่ำทั้งหมดในตัวอย่าง Java - อันนี้ทำด้วยซับเดียวง่ายๆ
6. สร้าง Alphabetic String ด้วย Apache Commons Lang
อีกตัวอย่างที่ง่ายมาก - คราวนี้สตริงที่มีขอบเขตที่มีอักขระตามตัวอักษรเท่านั้น แต่ไม่มีการส่งแฟล็กบูลีนไปยัง API:
@Test public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() { String generatedString = RandomStringUtils.randomAlphabetic(10); System.out.println(generatedString); }
7. สร้างสตริงตัวอักษรและตัวเลขด้วย Apache Commons Lang
และสุดท้าย - สตริงที่มีขอบเขตแบบสุ่มเหมือนกันแต่คราวนี้ - ตัวเลข:
@Test public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() { String generatedString = RandomStringUtils.randomAlphanumeric(10); System.out.println(generatedString); }
และที่นั่นเรามี - การสร้างสตริงที่มีขอบเขตและไม่มีขอบเขตด้วย Java ธรรมดาตัวแปร Java 8 หรือไลบรารี Apache Commons
8. สรุป
ด้วยวิธีการใช้งานที่แตกต่างกันเราสามารถสร้างสตริงที่ถูกผูกไว้และไม่ถูกผูกไว้โดยใช้ Java ธรรมดาตัวแปร Java 8 หรือไลบรารี Apache Commons
ในตัวอย่าง Java เหล่านี้เราได้ใช้java.util.Randomแต่ประเด็นหนึ่งที่ควรกล่าวถึงคือไม่มีความปลอดภัยในการเข้ารหัส พิจารณาใช้java.security.SecureRandomแทนสำหรับแอปพลิเคชันที่ไวต่อความปลอดภัย
สามารถดูตัวอย่างและตัวอย่างข้อมูลเหล่านี้ได้ในโครงการ GitHub นี่เป็นโครงการที่ใช้ Maven ดังนั้นจึงควรนำเข้าและเรียกใช้งานได้ง่าย