java从hashcode

问题描述 投票:0回答:6

有什么方法可以在Java中使用字符串的哈希码,然后重新创建该字符串?

e.g。这样的东西:

String myNewstring = StringUtils.createFromHashCode("Hello World".hashCode());
if (!myNewstring.equals("Hello World"))
    System.out.println("Hmm, something went wrong: " + myNewstring);
我这样说,因为我必须将字符串变成整数值,然后从该整数值重建该字符串。

java string hashcode construct
6个回答
6
投票
如果您想使用任意的精度算术(例如,biginteger),那么您只需将每个角色作为整数并将它们置于将它们置于整个角色中。 VOILà.

没有。 多个字符串可以具有相同的哈希代码。 从理论上讲,您可以创建所有具有该哈希代码的字符串,但它将接近无限。

4
投票
我恐怕不可能。想一想,哈希码是一个长的值,即8个字节。字符串可能比这还要少,但也可能更长,您不能在不丢失的情况下将更长的字符串挤入8个字节中。

如果我没记错的话,Java HashCode算法每8个字节总和,以便您损失8个字节中的7个字节。如果您的字符串都很短,那么您可以将它们作为int或long编码而不会丢失任何东西。


2
投票

例如,“ 1019744689”和“ 123926772”都有-1727003481。这证明,对于任何整数,您可能会得到不同的结果(即

reversehashcode(hashcode(string)) != string

)。


1
投票
LLET假设字符串仅由字母,数字和标点符号组成,因此大约有70个可能的字符。

log_70{2^32} = 5.22...


0
投票
"Hello World"

:不可能;但是,如果幸运的话,可能会起作用。

您可以做这样的事情:

"Hello"

到达:

char[] chars = "String here".toCharArray();
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
    ints[i] = (int)chars[i];
}
我尚未实际测试过...这只是“概念”代码。
    


0
投票
USER14831455

输入图像描述在这里

输入图像描述在这里

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.