用 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 庫功能強大,並具有其他許多功能,例如基本的數值方法,併發性和物件反射。