为相同的字符串获取相同的唯一ID

时间:2013-05-21 15:24:19

标签: java

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

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

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

6 个答案:

答案 0 :(得分:6)

调用String对象的hashCode方法。

I.e:

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

给予:

  

748582308
  748582308

在这种情况下使用hashCode符合您的要求(当您制作时),但要小心,两个不同的String可以生成 SAME hashCode值! (参见@Dirk示例)

答案 1 :(得分:3)

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

答案 2 :(得分: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)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这取决于您是否希望2个不同的String必须始终提供2个不同的标识符。 String.hashCode()可以执行您想要的操作,相同的字符串将始终提供相同的ID,但是2个不同的字符串也可以提供相同的ID。

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

答案 5 :(得分: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();