Java 是否可以使用字符串作为随机实例的种子?
我有一个字符串值,我想使用该字符串作为种子初始化一个随机类 有可能做到这一点吗?如果有,如何做到Java 是否可以使用字符串作为随机实例的种子?,java,android,Java,Android,我有一个字符串值,我想使用该字符串作为种子初始化一个随机类 有可能做到这一点吗?如果有,如何做到 字符串不仅由ASCII组成。我可以有任何utf-8符号。您可以使用ascii值或utf-8符号,将它们全部写为数字,然后将它们相加。或者,如果需要,您可以选择更高级的“哈希函数”作为示例,请参见以下wikipedia页面:您可以使用String.hashCode的实现,不同之处在于使用long而不是int static long stringToSeed(String s) { if (s
字符串不仅由ASCII组成。我可以有任何utf-8符号。您可以使用ascii值或utf-8符号,将它们全部写为数字,然后将它们相加。或者,如果需要,您可以选择更高级的“哈希函数”作为示例,请参见以下wikipedia页面:您可以使用
String.hashCode
的实现,不同之处在于使用long
而不是int
static long stringToSeed(String s) {
if (s == null) {
return 0;
}
long hash = 0;
for (char c : s.toCharArray()) {
hash = 31L*hash + c;
}
return hash;
}
这样你就得到了一个
长的,当然也有不同的字符串可以产生相同的种子。根据您用作输入的字符串,某些种子可能比其他种子发生的概率更高。简单地说,您不能。随机数是一个数字。您必须将字符串转换为一个数字(长),首先将该数字用作随机的种子-如果字符串包含一个数字或它是可转换的。。。供您参考:您可以在其上运行CRC32,生成的整数将是您的种子。或者,如果您的字符串仅包含a-z和0*9个字符(即:去掉英语句子中的所有标点字符和空格)@Jeroenvanevel,您可以从基36进行转换,但如果我的字符串不是英语?如果有10个字符的utf-8字符串。它是20字节,或160位。它是2^160的变种。长时间内不会太多?CRC32无论如何都会返回长时间(这只是一个错误纠正代码):