上一篇是只有数字和大小写字母的组合,这篇加上特殊字符和数字、大小写字母的组合以及只有汉字的单个组合
public class RandomString {
public static final int FIGURE_onLY = 0;
public static final int FIGURE_LOWER_CASE = 1;
public static final int FIGURE_POWER_CASE = 2;
public static final int LOWER_CASE_onLY = 3;
public static final int POWER_CASE_onLY = 4;
public static final int LOWER_CASE_POWER_CASE = 5;
public static final int FIGURE_LOWER_CASE_POWER_CASE = 6;
public static final int CHINESE_CHARACTER_onLY = 7;
public static final int SPECIAL_CHARACTER_onLY = 8;
public static final int FIGURE_SPECIAL_CHARACTER = 9;
public static final int LOWER_CASE_SPECIAL_CHARACTER = 10;
public static final int POWER_CASE_SPECIAL_CHARACTER = 11;
public static final int LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER = 12;
public static final int FIGURE_POWER_CASE_SPECIAL_CHARACTER = 13;
public static final int FIGURE_LOWER_CASE_SPECIAL_CHARACTER = 14;
public static final int FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER = 15;
private static final String LETTER_STRING = "abcdefghijklmnopqrstuvwxyz";
private static final String SPECIAL_CHARACTER_STRING = "!"#$%&'()*+,-.:;/<=>?@[\]^_`{|}~";
public RandomString() {
}
public static String createRandomString(int length, int type) {
switch (type) {
// 只有数字
case FIGURE_ONLY:
// 只有小写字母
case LOWER_CASE_ONLY:
// 只有大写字母
case POWER_CASE_ONLY:
// 只有中文
case CHINESE_CHARACTER_ONLY:
// 只有特殊字符
case SPECIAL_CHARACTER_ONLY:
return oneCombination(type, length);
// 数字+小写字母
case FIGURE_LOWER_CASE:
// 数字+大写字母
case FIGURE_POWER_CASE:
// 小写字母+大写字母
case LOWER_CASE_POWER_CASE:
// 数字+特殊字符
case FIGURE_SPECIAL_CHARACTER:
// 小写字母+特殊字符
case LOWER_CASE_SPECIAL_CHARACTER:
// 大写字母+特殊字符
case POWER_CASE_SPECIAL_CHARACTER:
return twoCombination(type, length);
// 数字+小写字母+大写字母
case FIGURE_LOWER_CASE_POWER_CASE:
// 小写字母+大写字母+特殊字符
case LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
// 数字+小写字母+特殊字符
case FIGURE_LOWER_CASE_SPECIAL_CHARACTER:
// 数字+大写字母+特殊字符
case FIGURE_POWER_CASE_SPECIAL_CHARACTER:
return threeCombination(type, length);
// 数字+小写字母+大写字母+特殊字符
case FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
return fourCombination(type, length);
default:
return "";
}
}
private static String oneCombination(int type, int length) {
StringBuilder builder = new StringBuilder();
switch (type) {
case FIGURE_ONLY:
for (int i = 0; i < length; i++) {
builder.append(number());
}
return builder.toString();
case LOWER_CASE_ONLY:
for (int i = 0; i < length; i++) {
builder.append(lowerCase());
}
return builder.toString();
case POWER_CASE_ONLY:
for (int i = 0; i < length; i++) {
builder.append(powerCase());
}
return builder.toString();
case CHINESE_CHARACTER_ONLY:
for (int i = 0; i < length; i++) {
builder.append(chineseCharacter());
}
return builder.toString();
case SPECIAL_CHARACTER_ONLY:
for (int i = 0; i < length; i++) {
builder.append(specialCharacter());
}
return builder.toString();
default:
return "";
}
}
private static String twoCombination(int type, int length) {
StringBuilder builder = new StringBuilder();
Random random = new Random();
switch (type) {
case FIGURE_LOWER_CASE:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? number() : lowerCase());
}
return builder.toString();
case FIGURE_POWER_CASE:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? number() : powerCase());
}
return builder.toString();
case LOWER_CASE_POWER_CASE:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? lowerCase() : powerCase());
}
return builder.toString();
case FIGURE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? number() : specialCharacter());
}
return builder.toString();
case LOWER_CASE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? lowerCase() : specialCharacter());
}
return builder.toString();
case POWER_CASE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(2) == 0 ? powerCase() : specialCharacter());
}
return builder.toString();
default:
return "";
}
}
private static String threeCombination(int type, int length) {
StringBuilder builder = new StringBuilder();
Random random = new Random();
int randomIndex;
switch (type) {
case FIGURE_LOWER_CASE_POWER_CASE:
for (int i = 0; i < length; i++) {
randomIndex = random.nextInt(3);
builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? powerCase() : lowerCase());
}
return builder.toString();
case LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
randomIndex = random.nextInt(3);
builder.append(randomIndex == 0 ? lowerCase() : randomIndex == 1 ? powerCase() : specialCharacter());
}
return builder.toString();
case FIGURE_LOWER_CASE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
randomIndex = random.nextInt(3);
builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? lowerCase() : specialCharacter());
}
return builder.toString();
case FIGURE_POWER_CASE_SPECIAL_CHARACTER:
for (int i = 0; i < length; i++) {
randomIndex = random.nextInt(3);
builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? powerCase() : specialCharacter());
}
return builder.toString();
default:
return "";
}
}
private static String fourCombination(int type, int length) {
StringBuilder builder = new StringBuilder();
Random random = new Random();
int randomIndex;
// 因为只有一个判断,所以就直接用if了,若有两个及以上可用switch
if (type == FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER) {
for (int i = 0; i < length; i++) {
randomIndex = random.nextInt(4);
builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? lowerCase() : randomIndex == 2 ? powerCase() : specialCharacter());
}
return builder.toString();
}
return "";
}
private static String number() {
return String.valueOf((new Random()).nextInt(10));
}
private static String lowerCase() {
return String.valueOf(LETTER_STRING.charAt((new Random()).nextInt(LETTER_STRING.length())));
}
private static String powerCase() {
return String.valueOf(Character.toUpperCase(LETTER_STRING.charAt((new Random()).nextInt(LETTER_STRING.length()))));
}
private static String chineseCharacter() {
return String.valueOf((char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));
}
private static String specialCharacter() {
return String.valueOf(SPECIAL_CHARACTER_STRING.charAt((new Random()).nextInt(SPECIAL_CHARACTER_STRING.length())));
}
}
调用:
该方法在随机产生 100000个字符耗时在3ms-300ms内及上下波动



