Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
应返回9个字符随机字符串的Java函数_Java_String_Random - Fatal编程技术网

应返回9个字符随机字符串的Java函数

应返回9个字符随机字符串的Java函数,java,string,random,Java,String,Random,这个函数非常简单,我就是不知道出了什么问题 private String genRandKey() { rnd.setSeed(datetime.getTime()); String keyset = "abcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"Ł$%^&*()_+-=[]{}:@~;'#<>?|\\,./"; String key = new String(); for (int

这个函数非常简单,我就是不知道出了什么问题

 private String genRandKey() {
    rnd.setSeed(datetime.getTime());
    String keyset = "abcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"Ł$%^&*()_+-=[]{}:@~;'#<>?|\\,./";
    String key = new String();
    for (int i = 0; i < 9; i++) {
        key.concat(String.valueOf(keyset.charAt(rnd.nextInt(keyset.length() - 1))));

    }
    return key;
}
私有字符串genRandKey(){
rnd.setSeed(datetime.getTime());
String keyset=“ABCDEFGHIJKLMABCDFGHIJKLMNOPQRSTUVWXYZ0123456789!\”Ł$^&*()+-=[]{}:@~;'#?| \,./”;
字符串键=新字符串();
对于(int i=0;i<9;i++){
key.concat(String.valueOf(keyset.charAt(rnd.nextInt(keyset.length()-1)));
}
返回键;
}

它只返回一个空字符串。

concat
返回一个新字符串,它不能修改原始字符串,它们是不可变的,我建议使用一个

concat
返回一个新字符串,它不能修改原始字符串,它们是不可变的,我建议使用一个

字符串是不可变的对象,所以您需要这样做

key = key.concat(String.valueOf(keyset.charAt(rnd.nextInt(keyset.length() - 1))));

字符串是不可变的对象,所以您需要

key = key.concat(String.valueOf(keyset.charAt(rnd.nextInt(keyset.length() - 1))));

一种更快更简单的方法是使用StringBuilder(用于构建字符串)

StringBuilder键=新的StringBuilder(9);
while(key.length()<9)
key.append(keyset.charAt(rnd.nextInt(keyset.length()-1));
return key.toString();

一种更快、更简单的方法是使用StringBuilder(用于构建字符串)

StringBuilder键=新的StringBuilder(9);
while(key.length()<9)
key.append(keyset.charAt(rnd.nextInt(keyset.length()-1));
return key.toString();

唯一的问题是它是一个服务器应用程序,我希望它尽可能快,在某些情况下使用对象只会降低程序的速度,但我同意这是正确的答案。上面的代码使用的对象远远少于您的示例。您可以回收StringBuilder并返回它,而不是字符串副本。这uld意味着每次都不创建对象。唯一的问题是,它是一个服务器应用程序,我希望它尽可能快,在某些情况下使用对象只会减慢程序的速度,但我同意这是正确的答案。上面的代码使用的对象远少于示例中的对象。您可以回收StringBuilder并返回它而不是字符串副本。这意味着每次都不会创建对象。