假设我有 n 个字符串,现在我想使用一个函数将每个字符串映射到一个 0 到 n-1 范围内的整数,这样每当我调用一个函数并传递字符串和 n 时,它都会给我相同和唯一的随时随地映射。所以假设如果我有 4 个字符串 "str1","str2","str3","str4"那么映射将从 0-3 并且是唯一的。
我尝试做类似的事情:str.hashCode() % n
,这给了我相同的映射,但不在 0 到 n-1 的范围内。我在 PHP 中发现了一些类似于这里的东西 -
https://madcoda.com/2014/04/how-to-hash-a-string-to-integer-with-a-range-php/
最佳答案
作为记录
在 Java 中,将随机字符串散列到一个整数:
Math.abs(str.hashCode() % 7)
结果将为 0(含)到 6(含)。笔记:
如果输入字符串真的是随机的并且长度相同等(例如......输入是一大堆uuid),那么这里的输出将是随机平衡的。
如果输入是——比如说——许多人的名字,那么输出是不太可能随机平衡的。
笔记:
在这里回答了 OP 在标题中的字面意思。
事实上,OP 所询问的(在正文中)与散列完全没有关系。 (那只是一个查找表、一个正则表达式等。)
关于java - 如何在Java中将字符串散列为具有范围的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058551/