產生指定長度(預設 6 位)的隨機字串,字符池包含大小寫英文字母與數字 0-9,並去重確保唯一性。
package com.amos.tools;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class InvertCodeGenerator {
public static void main(String[] args) {
List<String> results = genCodes(6, 100);
System.out.println("生成數量:" + results.size());
results.forEach(System.out::println);
}
public static List<String> genCodes(int length, long num) {
List<String> results = new ArrayList<>();
Random random = new Random(); // 提升至外層,避免重複建立
for (int j = 0; j < num; j++) {
StringBuilder val = new StringBuilder();
for (int i = 0; i < length; i++) {
boolean isChar = random.nextBoolean(); // true=字母, false=數字
if (isChar) {
boolean upper = random.nextBoolean();
int base = upper ? 65 : 97; // 'A'=65, 'a'=97
val.append((char) (base + random.nextInt(26)));
} else {
val.append(random.nextInt(10));
}
}
String code = val.toString().toLowerCase(); // 統一小寫
if (!results.contains(code)) results.add(code); // 去重
}
return results;
}
}
StringBuilder 替代字串拼接,效能大幅提升。Random 實例提至迴圈外,避免種子重複導致隨機性下降。nextBoolean() 簡化 0/1 判斷邏輯。List.contains(),量大時建議改用 HashSet 存儲中間結果。