我有一个 String
变量,我想将其转换为 long
变量。
问题是 String 变量永远不会包含任何数字,因此只需调用 Long.parseLong(myString);
就会抛出 NumberFormatException
。
澄清我的意图:
我有一个从 String
参数内返回 long
的方法。我希望该方法根据 String
变量生成 ID,以便稍后能够对 long
值进行分组。
我可以使用正则表达式来解决这个问题,但我的问题是是否有任何直接的方法来获取String
的long
值?
最佳答案
你说你想要一个long
值。内置的 hashCode()
返回一个 int
,而不是 long
。如果您确实需要 long
,那么您需要使用返回 long
的哈希方法。有多种可能性,但我通常建议 FNV用于非加密目的的哈希。它非常容易编码,并且有多种大小,包括 64 位。
预计到达时间:FNV 哈希代码位于我链接到的 FNV 网站上。需要注意的是 1) 无符号和有符号 64 位数字和 2) 字符编码。
long FNV64Hash(String inString) throws UnsupportedEncodingException {
// FNV-64 constants.
long FNVprime = 1099511628211L;
// Needs workround for unsigned 64-bit: 14695981039346656037.
long FNVbasis = (146959810393466560L * 100L) + 37L;
// Alternative: long FNVbasis = -3750763034362895579L;
// Convert string to bytes.
byte[] bytes = inString.getBytes("UTF-8"); // Specify a character encoding.
long hash = FNVbasis;
for (byte aByte : bytes) {
hash ^= aByte;
hash *= FNVprime;
}
return hash;
} // end FNV64Hash()
关于java - 不包含数字的字符串的长值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461386/