Java 中的生成给定大小的随机字符串

2025 年 1 月 7 日 | 阅读 9 分钟

在 Java 中生成随机字符串是一个简单的概念,通常用于构建 ID、临时密码、会话令牌或其他需要字母数字字符串的场景。有几种方法可以使用不同的类和方法来实现这一点。

方法 1:使用 Math.random()

Math.random() 方法返回一个介于 0.0(含)和 1.0(不含)之间的随机双精度数。此值可以缩放并转换为整数,以便准确地从预定义的字符集中选择字符来构造随机字符串。

算法

步骤 1:定义字符集:创建一个包含可以作为随机字符串一部分的所有字符的字符串(例如,大写字母、小写字母、数字)。

步骤 2:初始化 StringBuilder:使用 StringBuilder 高效地构建字符串,因为它允许动态调整大小和追加。

步骤 3:生成随机字符:使用循环,通过使用 Math.random() 生成随机索引来生成字符串的每个字符。从字符集中选择生成索引处的字符。

步骤 4:将选定的字符追加到 StringBuilder。将 StringBuilder 转换为字符串并返回。

文件名:MathRandomStringGenerator.java

输出

 
Random String: S14AL6rGlO                                                                                  

方法 2:使用 CharSet

在 Java 中生成随机字符串时,使用 CharSet 可以灵活地控制字符串中可以出现的字符。此方法允许您指定要包含的字符,例如仅大写字母、小写字母、数字、特殊字符或它们的任何组合。

算法

步骤 1:初始化 SecureRandom:创建一个 SecureRandom 实例,以确保加密强度高的随机值。

步骤 2:定义字符集:指定一个包含可用于随机字符串的所有字符的字符串。

创建一个 StringBuilder 实例,以有效地构建所需长度的字符串。

 

步骤 3:生成随机字符:对于字符串所需长度的每个位置,使用 SecureRandom 实例生成一个随机索引。

步骤 4:使用随机索引从字符集中选择一个字符。将选定的字符追加到 StringBuilder。将 StringBuilder 转换为字符串并返回。

文件名:SecureCustomCharSetRandomStringGenerator.java

输出

 
Secure Random String: jf0ip3t8LI                                                                                                       

方法 3:使用正则表达式

Java 中的正则表达式(regex)提供了一种描述字符串可以匹配的模式的方法。要使用正则表达式生成随机字符串,通常使用占位符和量词来定义字符串的结构(例如,字符、数字、特殊字符),然后随机地用实际字符替换这些占位符。

算法

步骤 1:创建一个 StringBuilder (sb) 来构造随机字符串。实例化一个 Random 对象 (random) 来生成随机数。

步骤 2:编译 Regex 模式:使用 Pattern.compile(regexPattern) 将 regexPattern 字符串编译为 Pattern 对象 (pattern)。

步骤 3:开始一个循环,从 0 到 length - 1 生成字符串的字符。使用 random.nextInt(126 - 32 + 1) + 32 在 ASCII 范围内生成一个随机整数。将此整数转换为字符 (char) 以获取随机 ASCII 字符。

步骤 4:将生成的随机字符 (randomChar) 追加到 StringBuilder (sb)。将 StringBuilder 转换为字符串 (sb.toString())。通过调用 pattern.matcher(string) 创建一个 Matcher (matcher) 来检查生成的字符串是否匹配正则表达式模式。

步骤 5:如果生成的字符串不匹配正则表达式 (!matcher.matches()),则递归调用 generateRandomString(regexPattern, length),直到生成匹配的字符串为止。

步骤 6:一旦生成了匹配正则表达式的有效字符串,就将其作为输出返回。

文件名:RegexRandomStringGenerator.java

输出

 
Random String: dhc4xKc5IA

方法 4:使用列表

在 Java 中使用列表生成随机字符串是一种灵活高效的方法。列表提供动态大小和易于操作,这使其适用于管理可以从中生成随机字符串的自定义字符集。此方法涉及将字符存储在列表中,并从该列表中随机选择字符来形成所需的随机字符串。

算法

步骤 1:初始化 charList 列表,并用大写字母('A' 到 'Z')、小写字母('a' 到 'z')和数字('0' 到 '9')填充它。

步骤 2:随机字符选择:使用 Random 对象 (random) 在 charList 的边界内生成随机索引。

步骤 3:对于循环的每次迭代(从 0 到 length - 1),生成一个随机索引,并将 charList 中的相应字符追加到 StringBuilder (sb)。

步骤 4:字符串构造:StringBuilder 通过追加每个选定的随机字符来高效地构造最终的随机字符串。sb.toString() 方法将 StringBuilder 转换为字符串,然后作为最终的随机字符串返回。

步骤 5:main 方法设置所需随机字符串的长度(此示例中为 10),并调用 generateRandomString 方法来生成并打印随机字符串。

文件名:ListRandomStringGenerator.java

输出

 
Random String: e3fhP3zA4U 

方法 5:使用 Deque

使用 Deque(双端队列)生成随机字符串提供了构建具有特定模式或约束的字符串的灵活性。当需要控制字符放置或创建遵循必需规则的字符串时,此方法特别有用。

算法

步骤 1:定义一个字符串 charSet,其中包含可用于生成随机字符串的所有字符(例如,“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789”)。

步骤 2:初始化一个 Character 类型的 Deque (charDeque)。实例化一个 Random 对象 (random) 来生成随机数。

步骤 3:生成随机字符:从 0 循环到 length - 1(其中 length 是随机字符串所需的长度):在 charSet 的边界内生成一个随机索引。

步骤 4:从 charSet 中检索生成索引处的字符。使用 random.nextBoolean() 随机决定将此字符添加到 charDeque 的开头或末尾

步骤 4.1:如果为 true,则将字符添加到 deque 的开头 (charDeque.addFirst(randomChar))。如果为 false,则将字符添加到 deque 的末尾 (charDeque.addLast(randomChar))。

步骤 5:构造最终字符串:初始化一个 StringBuilder (sb) 来构造最终字符串。当 charDeque 不为空时:从 deque 的开头移除字符 (charDeque.pollFirst()) 并将其追加到 sb。

步骤 6:将 StringBuilder 转换为字符串 (sb.toString()) 并将其作为最终的随机字符串返回。

文件名:DequeRandomStringGenerator.java

输出

 
Random String: 9DhhXfzcBj

方法 6:使用 Queue

在 Java 中使用 Queue 生成随机字符串可以灵活地控制字符插入和检索的顺序。当您希望对字符的添加或处理方式施加特定约束或模式时,此方法特别有用。

算法

步骤 1:定义 charSet,一个包含随机字符串所有可能字符的字符串(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)。

步骤 2:使用 LinkedList 创建一个名为 charQueue 的 Queue<Character> 来存储字符。实例化一个 Random 对象 (random) 来生成随机数。

步骤 3:生成随机字符串:使用 for 循环迭代 length 次(其中 length 是随机字符串所需的长度)。生成一个随机索引 (random.nextInt(charSet.length())) 来从 charSet 中选择一个字符。

步骤 4:使用 charSet.charAt() 检索随机索引处的字符。使用 charQueue.offer(randomChar) 将字符添加到 charQueue 的末尾。

步骤 5:使用指定容量(length)初始化 StringBuilder (sb) 以高效地构建最终的随机字符串。使用 while 循环迭代,直到 charQueue 为空:使用 charQueue.poll() 从 charQueue 的开头移除字符并将其追加到 sb。

步骤 6:使用 sb.toString() 将 StringBuilder sb 转换为字符串并将其作为最终的随机字符串返回。

步骤 7:在 main 方法中,指定随机字符串所需的长度(例如,10)。调用 generateRandomString(length) 来生成随机字符串并将其存储在 randomString 中。

文件名:QueueRandomStringGenerator.java

输出

 
Random String: B2sRLhAMn6