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无论如何都会返回长时间(这只是一个错误纠正代码):