有没有办法使用java找到与给定字符串等效的相同整数/ long或任何数字。
例如,如果我给出一个字符串“Java_programming”,它应该给我总是像“7287272”数字。
生成的数字/数字应该是唯一的,即对于“xyz”应该始终生成“123”而对于“abc”应该生成“123”。
答案 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();