用 Java 生成随机字符串
字母数字字符串包含数字和字母字符。在 Java 中,在许多情况下都使用字母数字字符串。例如,在用户注册应用程序后生成密码;在生成主键条目以标识数据库中的元素时;生成会话 ID 等。
本文将讨论四种在 Java 中生成随机字母数字字符串的方法。
- 正则表达式
-
Math.random()
方法 -
Charset
-
Apache Commons Lang
在 Java 中使用正则表达式生成随机字符串
此方法很简单,给出了一个包含小写字符和数字的大写字母数字字符串。
第一步是取 0 到 256 之间的字符。
第二步是过滤这些字符,留下我们想要包含在随机字符串中的元素。请记住,我们想要留下的字符是 0-9 和 A-Z,所以我们可以创建一个过滤器来删除所有其他的字符。
下一步是选择随机字符并将它们添加到 StringBuffer
中。然后我们使用 toString()
方法从 StringBuffer 中创建一个字符串。
下面是一个示例代码。
import java.nio.charset.*;
import java.util.*;
class GenerateAlphaNumericString {
static String getRandomString(int i)
{
// bind the length
bytearray = new byte[256]; byte[] bytearray;
String mystring;
StringBuffer thebuffer;
String theAlphaNumericS;
new Random().nextBytes(bytearray);
mystring
= new String(bytearray, Charset.forName("UTF-8"));
thebuffer = new StringBuffer();
//remove all spacial char
theAlphaNumericS
= mystring
.replaceAll("[^A-Z0-9]", "");
//random selection
for (int m = 0; m < theAlphaNumericS.length(); m++) {
if (Character.isLetter(theAlphaNumericS.charAt(m))
&& (i > 0)
|| Character.isDigit(theAlphaNumericS.charAt(m))
&& (i > 0)) {
thebuffer.append(theAlphaNumericS.charAt(m));
i--;
}
}
// the resulting string
return thebuffer.toString();
}
public static void main(String[] args)
{
// the random string length
int i = 15;
// output
System.out.println("A random string: " + getRandomString(i));
}
}
输出:
A random string: 4H4V7FWP8ZUKEGW
在 Java 中使用 Math.random()
方法生成随机字母数字字符串
它涉及手动创建一个包含所有可能字符的字符串。然后,通过从先前创建的字符串中选择字符和数字,来创建一个定义长度的随机字符串。
首先,我们定义了我们需要的两个变量-StringBuilder
和 String
。String
将包含所有大写字母和数字 0-9。该字符串不应有符号或空格,因为该字符串中字符的索引将用于随机选择字符。
其次,定义限于我们要创建的随机字符串的长度的迭代。
第三,使用 Math.random()
方法生成一个随机索引。从先前创建的字符串中获取字符,该字符是随机生成的索引位置,并将其附加到 StringBuilder
。然后,我们可以使用 toString()
方法从 StringBuilder 中获取随机字符串。
下面是一个示例代码。
class AlphaNumericStringGenerator {
static String getRandomString(int i)
{
String theAlphaNumericS;
StringBuilder builder;
theAlphaNumericS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789";
//create the StringBuffer
builder = new StringBuilder(i);
for (int m = 0; m < i; m++) {
// generate numeric
int myindex
= (int)(theAlphaNumericS.length()
* Math.random());
// add the characters
builder.append(theAlphaNumericS
.charAt(myindex));
}
return builder.toString();
}
public static void main(String[] args)
{
// the random string length
int i = 15;
// output
System.out.println("A random string: " + getRandomString(i));
}
}
输出:
A random string: BCQJPZLG3OC1MQD
使用 Charset 生成
我们使用 Charset,它位于 java.nio.charset
包中。字符集代表字符集,并表示字符和数字之间的映射。下面说明使用 Charset 创建字母数字字符串的过程。
第一步是获取 0 到 256 之间的字符。然后将 Random()
方法应用于上面的字符数组。第三步是通过迭代检查每个字符是字母还是数字。如果是它们中的任何一个,我们都将该字符添加到字符串的末尾,直到达到定义的长度。使用 toString()
方法将附加在 StringBuilder
上的字符转换为所需的字符串。
下面是一个示例代码。
import java.nio.charset.*;
import java.util.*;
class AlphaNumericStringGenerator {
static String getRandomString(int i)
{
byte[] bytearray;
String mystring;
StringBuffer thebuffer;
bytearray = new byte[256];
new Random().nextBytes(bytearray);
mystring
= new String(bytearray, Charset.forName("UTF-8"));
// Create the StringBuffer
thebuffer = new StringBuffer();
for (int m = 0; m < mystring.length(); m++) {
char n = mystring.charAt(m);
if (((n >= 'A' && n <= 'Z')
|| (n >= '0' && n <= '9'))
&& (i > 0)) {
thebuffer.append(n);
i--;
}
}
// resulting string
return thebuffer.toString();
}
public static void main(String[] args)
{
// the random string length
int i = 15;
// output
System.out.println("A random string: " + getRandomString(i));
}
}
输出:
A random string: XKT0JAHPRPZ6A3X
使用 Apache Commons Lang
这是最容易实现的方法,因为由第三方来处理实现,在这种情况下是 Apache
程序包。
Apache Commons Lang
软件包提供了许多与 Java 中的字符串操作有关的帮助程序实用程序。由于它是第三方,因此必须首先将其添加为项目中的依赖项。
我们可以使用 RandomStringUtils 类
来生成随机字符串。此类有三种可以提供随机字符串的方法:
-
RandomStringUtils.randomNumeric
:创建一个指定长度的随机字符串。 -
RandomStringUtils.randomAlphabetic
:创建一个随机的字母字符串,包含大小写字符 -
RandomStringUtils.randomAlphanumeric
:创建具有指定长度的随机字母数字字符串。
下面是一个代码示例。
import org.apache.commons.lang3.RandomStringUtils;
public class Index {
public static void main(String[] args){
System.out.println(RandomStringUtils.randomAlphanumeric(15)toUpperCase(););
}
}
输出:
RM0WMYOKN7AS0KA
RandomStringUtils.randomAlphanumeric
直接实现随机字母数字,并且可以选择使用小写字母或大写字母或同时使用两者。当你不想在代码中实现字符串生成时,这是一种有效的方法。Apache 库功能强大,并具有其他许多功能,例如基本的数值方法,并发性和对象反射。
相关文章
在 Java 中获取文件大小
发布时间:2023/05/01 浏览次数:139 分类:Java
-
Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。
Java 中的文件分隔符
发布时间:2023/05/01 浏览次数:108 分类:Java
-
本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。
Java 中的文件过滤器
发布时间:2023/05/01 浏览次数:193 分类:Java
-
本篇文章介绍如何在 Java 中使用 FileFilter。FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。
Java 获取 ISO 8601 格式的当前时间戳
发布时间:2023/05/01 浏览次数:132 分类:Java
-
本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。
在 Java 中获取数组的子集
发布时间:2023/05/01 浏览次数:142 分类:Java
-
本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集
用 Java 填充二维数组
发布时间:2023/05/01 浏览次数:110 分类:Java
-
二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
Java 中 List 和 Arraylist 的区别
发布时间:2023/05/01 浏览次数:90 分类:Java
-
表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵