如果这包括那个(java 密码生成器)

If this then include that (java password generator)

我正在制作一个密码生成器,我希望用户可以选择是否要包含 upper/lower 大小写字母、特殊字符和数字,但我不确定如何使用我现在没有做太多 if 语句的代码。

private static final String ALPHA_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String ALPHA = "abcdefghijklmnopqrstuvwxyz";
private static final String NUMERIC = "0123456789";
private static final String SPECIAL_CHARS = "!@#$%^&*_=+-/";
private static SecureRandom random = new SecureRandom(); 

以上是可用于生成密码的不同字符。

public void generatePasswordAgain(ActionEvent event) throws IOException {
    genPassword.setText(generatePassword(length, ALPHA_CAPS + ALPHA + SPECIAL_CHARS + NUMERIC));
}

以上是生成密码时调用的函数。下面是实际生成密码的代码。

public static String generatePassword(int len, String dic) {
    String result = "";
    for (int i = 0; i < len; i++) {
        int index = random.nextInt(dic.length());
        result += dic.charAt(index);
    }
    return result;
}

我想让使用该程序的人有机会选择他们想要在他们的程序中包含的字符类型。有没有一种方法可以在不使用太多 if 语句的情况下做到这一点?

人们对他们想要包含的字符的要求由布尔值定义。

如果你想避免 switch case 和 if else 级联,你可以使用单行三元运算符。

private static final String EMPTY = "";

... // StringUtils.EMPTY can also be used.

boolean alphaUpper, alphaLower, numeric, special;

... // set your boolean flags here

genPassword.setText(generatePassword(length, (alphaUpper ? ALPHA_CAPS : EMPTY) + (alphaLower ? ALPHA : EMPTY) + (special ? SPECIAL_CHARS : EMPTY) + (numeric ? NUMERIC : EMPTY)));