繁体   English   中英

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

[英]Get same unique id for same string

有没有一种方法可以使用java查找相同的整数/长整数或与给定字符串等效的任何数字。

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

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

调用String对象的hashCode方法。

即:

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示例)

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

为什么不从字符串创建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)

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

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

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

首先将您的字符串转换为字节序列:

String a = "hello";

byte[] b = a.getBytes();

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

BigInteger c = new BigInteger(b);

最后,使用其toString()方法将BigInteger转换回字符串

String d = c.toString();

您可以确保对于相同的输入获得相同的输出,对于不同的输入获得不同的输出。 您可以通过以下方式将所有这些组合在一起

String d = new BigInteger(a.getBytes()).toString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM