【发布时间】:2014-07-21 19:29:26
【问题描述】:
我有一个字符串值,我想使用字符串作为种子初始化一个随机类?
是否有可能做到这一点,如果可以,怎么做?
字符串不仅包含 ASCII。我可以有任何 utf-8 符号。
【问题讨论】:
-
简单地说,你不能。随机是一个数字。您必须将字符串转换为数字 (long),首先将该数字用作 Random 的种子 - 如果字符串包含数字或可转换...供您参考:developer.android.com/reference/java/util/Random.html
-
你可以在它上面运行一个 CRC32,得到的整数就是你的种子。developer.android.com/reference/java/util/zip/CRC32.html
-
或者,如果您的字符串仅包含 a-z 和 0*9 个字符(即:去掉英文句子中的所有标点符号和所有空格),您也可以从 base 36 进行转换
-
@JeroenVannevel 但如果我的字符串不是英文的?如果有 10 个字符的 utf-8 字符串。它是 20 字节或 160 位。它有 2^160 个变体。不会太久?
-
CRC32 无论如何都会返回一个 long(它只是一个纠错码):developer.android.com/reference/java/util/zip/CRC32.html