0

有没有办法找到相同的整数/长整数或任何与给定字符串等效的数字。

例如,如果我给一个字符串“Java_programming”,它应该总是给我类似“7287272”的数字。

生成的数字/数字应该是唯一的,即它应该始终为“xyz”生成“123”,而不是为“abc”生成“123”。

4

6 回答 6

6

调用对象的hashCode方法String

IE :

String t = "Java_programming";
String t2 = "Java_programming";
System.out.println(t.hashCode());
System.out.println(t2.hashCode());

给出:

748582308
748582308

在这种情况下使用hashCode将满足您的要求(如您所制定的那样),但要小心,两个不同String的可以产生相同 hashCode的值!(参见@Dirk 示例)

于 2013-05-21T15:26:28.017 回答
3

你有什么要求?您可以只使用 anew BigInteger("somestring".toBytes("UTF-8")).toString()将字符串转换为数字,但它会做您想要的吗?

于 2013-05-21T15:32:38.410 回答
0

首先获取您的字符串并将其转换为字节序列:

String a = "hello";

byte[] b = a.getBytes();

现在将字节转换为数字表示,使用BigInteger

BigInteger c = new BigInteger(b);

最后,使用它的方法将BigInteger后面转换为字符串toString()

String d = c.toString();

保证相同的输入得到相同的输出,不同的输入得到不同的输出。您可以通过以下方式将所有这些组合成一个步骤

String d = new BigInteger(a.getBytes()).toString();
于 2013-05-21T15:50:37.427 回答
0

为什么不从字符串中创建一个 SHA-1 并将其用作密钥?

static HashFunction hashFunction = Hashing.sha1();
public static byte[] getHash(final String string) {
  HashCode hashCode = hashFunction.newHasher().putBytes(string.getBytes).hash();
  return hashCode.asBytes();
}

然后你可以做Bytes.toInt(hash)Bytes.toLong(hash)

于 2013-05-21T15:27:09.443 回答
0

这取决于您是否希望 2 个不同的 String 必须始终提供 2 个不同的标识符。 String.hashCode()可以做你想做的事,相同的字符串总是会给出相同的 ID,但 2 个不同的字符串也可以给出相同的 ID。

如果您想要一个唯一标识符,您可以连接字符串中的每个字节字符值。

于 2013-05-21T15:38:39.957 回答
0

对的,这是可能的。您可以在字符串上使用 String.hashCode() 方法。 在这里您可以找到更多详细信息如何创建此方法返回的整数

于 2013-05-21T15:29:46.367 回答