Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用选项生成随机密码?_Java_Random - Fatal编程技术网

如何在Java中使用选项生成随机密码?

如何在Java中使用选项生成随机密码?,java,random,Java,Random,我知道数字有nextInt,nextDouble等,甚至true或false有nextBoolean等,但我还没有找到字符串的以下内容: 创建最小/最大或甚至特定经度的能力。例如,创建一个介于6或8个字符之间的随机字符串,或创建一个包含12个字符的随机字符串 能够指定模式。例如,只有数字,只有字母,只有大写字母,只有像!@$%这样的特殊符号^&,等等 基本上,我试图创建的是一个笔测试工具,能够生成随机密码,但对于Java,只使用JDK(可以是JDK8,但我对第三方库不感兴趣),利用代码中最大

我知道数字有
nextInt
nextDouble
等,甚至
true
false
nextBoolean
等,但我还没有找到
字符串的以下内容:

  • 创建最小/最大或甚至特定经度的能力。例如,创建一个介于6或8个字符之间的随机字符串,或创建一个包含12个字符的随机字符串

  • 能够指定模式。例如,只有数字,只有字母,只有大写字母,只有像
    !@$%这样的特殊符号^&,等等

基本上,我试图创建的是一个笔测试工具,能够生成随机密码,但对于Java,只使用JDK(可以是JDK8,但我对第三方库不感兴趣),利用代码中最大数量的可用内置工具,只是为了不重新发明轮子。在开始编写代码之前,我想知道可用的方法

我不是在寻找能给我想要的一切的东西。我只是想知道调用什么函数来检索,例如,一个随机字符,或者一个随机大写字符,等等。我没有问题把所有的东西粘在一起

我正在寻找OOTB工具来帮助我实现这一点。这也意味着可以向Java请求特定的字符,比如只有字母、符号、大写字母、数字等等。我知道我可以处理字节并将其转换为字符,但可能已经有了一种高效的内置功能可以利用

迪马桑能够提供我想要的一部分。我将能够混合使用他的代码和
字符
比较方法,如:

isDigit
isLetter
isLetterOrDigit
isLowerCase
isUpperCase
isSpaceChar
isDefined
我从Oracle文档中获取了这些方法,在那里我找到了一个很好的示例:

不习惯编写全局软件的开发人员可能会决定 通过将字符的属性与字符常量进行比较来确定字符的属性。对于 例如,他们可能会编写如下代码:


把所有东西粘在一起,我就能做出我想要的东西。谢谢。

Java中没有OOTB随机字符串生成器

但我想向您推荐我在项目中编写并使用的生成器:

public class RandomGenerator {
    private static final String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static String generateRandom(int length) {
        if (length <= 0) {
            throw new IllegalArgumentException("String length must be a positive integer");
        }

        Random random = new SecureRandom();
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            sb.append(characters.charAt(random.nextInt(characters.length())));
        }

        return sb.toString();
    }
}
公共类随机生成器{
私有静态最终字符串字符=“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
公共静态字符串生成器DOM(整型长度){

如果(长度不。这是你的代码。这就是编程的意义:编写代码以获得你所需要的。我想我能够解释为什么这不是重复的,请让我知道这是否有意义。这是非常好和简短的。你知道Java是否提供了一种方法来替换你的“字符”带有某种内置图表的变量,仅用于数字、字母表、符号等?@facundop不幸的是,我没有找到您正在讨论的解决方案。当我需要数字时,我只需将其替换为
0123456789
等等。顺便说一句,如果您找到什么,请也告诉我,谢谢。我编辑了我的原始问题。我会利用它现在使用字符API筛选出好的候选字符。谢谢!@facundop,您觉得如何将一组使用字符作为参数传递给该方法以使其更通用:
generateradom(字符串字符,int-length)
?我喜欢这个想法。我还在考虑创建一个属性文件tho。我希望使用这个小应用程序的输出作为其他基于控制台的应用程序的输入
char ch;
// ...

// This code is OK!

if (Character.isLetter(ch))
    // ...

if (Character.isDigit(ch))
    // ...

if (Character.isSpaceChar(ch))
    // ...
public class RandomGenerator {
    private static final String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static String generateRandom(int length) {
        if (length <= 0) {
            throw new IllegalArgumentException("String length must be a positive integer");
        }

        Random random = new SecureRandom();
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            sb.append(characters.charAt(random.nextInt(characters.length())));
        }

        return sb.toString();
    }
}