有没有办法找到相同的整数/长整数或任何与给定字符串等效的数字。
例如,如果我给一个字符串“Java_programming”,它应该总是给我类似“7287272”的数字。
生成的数字/数字应该是唯一的,即它应该始终为“xyz”生成“123”,而不是为“abc”生成“123”。
有没有办法找到相同的整数/长整数或任何与给定字符串等效的数字。
例如,如果我给一个字符串“Java_programming”,它应该总是给我类似“7287272”的数字。
生成的数字/数字应该是唯一的,即它应该始终为“xyz”生成“123”,而不是为“abc”生成“123”。
调用对象的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 示例)
你有什么要求?您可以只使用 anew BigInteger("somestring".toBytes("UTF-8")).toString()
将字符串转换为数字,但它会做您想要的吗?
首先获取您的字符串并将其转换为字节序列:
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();
为什么不从字符串中创建一个 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)
这取决于您是否希望 2 个不同的 String 必须始终提供 2 个不同的标识符。
String.hashCode()
可以做你想做的事,相同的字符串总是会给出相同的 ID,但 2 个不同的字符串也可以给出相同的 ID。
如果您想要一个唯一标识符,您可以连接字符串中的每个字节字符值。
对的,这是可能的。您可以在字符串上使用 String.hashCode() 方法。 在这里您可以找到更多详细信息如何创建此方法返回的整数