如何在Java中生成具有自定义长度的随机字母数字字符串

本文概述

  • A.生成带有特定字符的随机字母数字字符串[a-ZA-Z0-9]
  • B.生成随机字符串Apache Commons Lang
  • C.生成通用唯一标识符(UUID)
许多开发人员不知道如何生成带有字母和数字的随机字符串。此功能对于生成随机标识符非常有用, 出于某些原因, 我们将使用临时标识符。在Java中, 有很多生成此类字符串的方法。
在本文中, 我们将向你展示3种使用Java轻松生成随机字符串的方法。
A.生成带有特定字符的随机字母数字字符串[a-ZA-Z0-9]为了使用自定义实现生成随机字符串, 你可以在自己的项目中使用以下方法作为助手:
import java.security.SecureRandom; /** * This method returns a random string generated with SecureRandom * * @param length * @return */public static String generateRandomString(int length) {// You can customize the characters that you want to add into// the random stringsString CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz"; String CHAR_UPPER = CHAR_LOWER.toUpperCase(); String NUMBER = "0123456789"; String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER; SecureRandom random = new SecureRandom(); if (length < 1) throw new IllegalArgumentException(); StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) {// 0-62 (exclusive), random returns 0-61int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length()); char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt); sb.append(rndChar); }return sb.toString(); }

此类使用Java.security的SecureRandom类实现随机字符串生成器。此类提供了加密功能强的随机数生成器(RNG)。加密强度高的随机数至少要符合FIPS 140-2″ 加密模块的安全性要求” 第4.9.1节中指定的统计随机数生成器测试。此外, SecureRandom必须产生不确定的输出。因此, 传递给SecureRandom对象的任何种子材料都必须不可预测, 并且所有SecureRandom输出序列必须具有加密强度。
你只需要基本调用generateRandomString方法, 即可将要生成的字符串的长度作为第一个参数, 例如:
// Your own packagepackage com.ourcodeworld.mavensandbox; // Import required classimport java.security.SecureRandom; /** * Basic example of random strings with SecureRandom * */public class Index {public static void main(String[] args){for (int i = 0; i < 5; i++) {System.out.println("Random string: " + generateRandomString(10)); System.out.println("\n"); }}/*** This method returns a random string generated with SecureRandom* * @param length* @return */public static String generateRandomString(int length) {String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz"; String CHAR_UPPER = CHAR_LOWER.toUpperCase(); String NUMBER = "0123456789"; String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER; SecureRandom random = new SecureRandom(); if (length < 1) throw new IllegalArgumentException(); StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) {// 0-62 (exclusive), random returns 0-61int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length()); char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt); sb.append(rndChar); }return sb.toString(); }}

上一类在循环内生成5个随机字符串, 这些字符串将在控制台中打印, 它将输出以下内容:
Random string: iU5OHBDJ34Random string: PDfkpDQMYzRandom string: 7OXEtv4PTTRandom string: CvYpocv3bERandom string: yyBeOe5cee

B.生成随机字符串Apache Commons Lang如果你不想自己实现此功能, 则可以依赖第三方程序包, 特别是Apache。标准Java库无法提供用于操纵其核心类的足够方法。 Apache Commons Lang提供了这些额外的方法。
Commons Lang包为java.lang API提供了许多帮助程序实用程序, 特别是字符串操作方法, 基本数值方法, 对象反射, 并发, 创建和序列化以及系统属性。此外, 它还包含对java.util.Date的基本增强, 以及一系列专用于构建方法的实用程序, 例如hashCode, toString和equals。
如果使用maven处理项目的依赖项, 请修改pom.xml文件, 并将软件包添加为依赖项:
< !-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> < dependency> < groupId> org.apache.commons< /groupId> < artifactId> commons-lang3< /artifactId> < version> 3.9< /version> < /dependency>

或者, 你可以下载包的.jar文件, 然后将其手动添加到你的项目中。有关此软件包的更多信息, 请访问Maven存储库中的官方页面。将包包含在项目中之后, 你将能够从包中导入RandomStringUtils类。在此类中, 你可以调用静态方法以生成随机字符串:
  • RandomStringUtils.randomNumeric:创建一个随机字符串, 其长度为指定的字符数。
  • RandomStringUtils.randomAlphabetic:创建一个随机字符串, 其长度在包含最小值和专有最大值之间。将从拉丁字母字符集(a-z, A-Z)中选择字符。
  • RandomStringUtils.randomAlphanumeric:创建一个随机字符串, 其长度为指定的字符数。将从拉丁字母字符(a-z, A-Z)和数字0-9中选择字符。
例如:
package com.ourcodeworld.mavensandbox; // Import required classimport org.apache.commons.lang3.RandomStringUtils; /** * Basic example of random strings with RandomStringUtils * */public class Index {public static void main(String[] args){System.out.println("\nNumeric string: [0-9]"); System.out.println(RandomStringUtils.randomNumeric(10)); System.out.println("\nAlphabetic String: [a-zA-Z]"); System.out.println(RandomStringUtils.randomAlphabetic(10)); System.out.println("\nAlphanumeric String: [a-zA-Z0-9]"); System.out.println(RandomStringUtils.randomAlphanumeric(10)); }}

此代码将生成如下输出:
Numeric string: [0-9]9688507775Alphabetic String: [a-zA-Z]BdNbwFqntHAlphanumeric String: [a-zA-Z0-9]IZdNATmcQs

C.生成通用唯一标识符(UUID)如果你想用Java生成UUID, Java的util包已经提供了生成此类ID的功能。 Java.util的UUID类表示一个不变的通用唯一标识符(UUID)。 UUID表示一个128位的值。这些全局标识符存在不同的变体。此类的方法用于操纵Leach-Salz变体, 尽管构造函数允许创建UUID的任何变体(如下所述)。
我们将向你展示如何生成具有2个变体的UUID, 第一个生成带破折号的ID(默认实现), 第二个不带破折号的ID:
package com.ourcodeworld.mavensandbox; // Import required classimport java.util.UUID; /** * Basic example of random strings with randomUUID * */public class Index {public static void main(String[] args){for (int i = 0; i < 5; i++) {System.out.println(generateRandomUUID()); }for (int i = 0; i < 5; i++) {System.out.println(generateRandomUUIDWithoutDash()); }}public static String generateRandomUUID() {return UUID.randomUUID().toString(); }public static String generateRandomUUIDWithoutDash() {return UUID.randomUUID().toString().replace("-", ""); }}

这将生成以下输出:
eccfd644-07b0-4817-ae37-da394cc1e6d387d6524d-5892-437c-b8fa-a06f5f98f3a235949777-141d-4a7f-a868-d385f0c6d86a1528594e-9687-42df-937d-241637746056dc9b998a-83f2-4e83-83ba-9b0f5ba0be7ab5cdbc574e8a4294b402234321818a4e6b450556572d47228ea03bacf335c3ec475d7823bd2d41c2a28b72aea6933526eb1dba5a4e864bc1aa4655e671cd5201ea40ef86685f4508a5429835d1aba78a

【如何在Java中生成具有自定义长度的随机字母数字字符串】编码愉快!

    推荐阅读