本文概述
许多开发人员不知道如何生成带有字母和数字的随机字符串。此功能对于生成随机标识符非常有用, 出于某些原因, 我们将使用临时标识符。在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 strings
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-61
int 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 package
package com.ourcodeworld.mavensandbox;
// Import required class
import 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-61
int 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: iU5OHBDJ34
Random string: PDfkpDQMYz
Random string: 7OXEtv4PTT
Random string: CvYpocv3bE
Random 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 class
import 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]
9688507775
Alphabetic String: [a-zA-Z]
BdNbwFqntH
Alphanumeric 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 class
import 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-da394cc1e6d3
87d6524d-5892-437c-b8fa-a06f5f98f3a2
35949777-141d-4a7f-a868-d385f0c6d86a
1528594e-9687-42df-937d-241637746056
dc9b998a-83f2-4e83-83ba-9b0f5ba0be7a
b5cdbc574e8a4294b402234321818a4e
6b450556572d47228ea03bacf335c3ec
475d7823bd2d41c2a28b72aea6933526
eb1dba5a4e864bc1aa4655e671cd5201
ea40ef86685f4508a5429835d1aba78a
编码愉快!
评论前必须登录!
注册