gpt4 book ai didi

java - 不包含数字的字符串的长值

转载 作者:行者123 更新时间:2023-12-01 11:41:52 25 4
gpt4 key购买 nike

我有一个 String 变量,我想将其转换为 long 变量。

问题是 String 变量永远不会包含任何数字,因此只需调用 Long.parseLong(myString); 就会抛出 NumberFormatException

澄清我的意图:

我有一个从 String 参数内返回 long 的方法。我希望该方法根据 String 变量生成 ID,以便稍后能够对 long 值进行分组。

我可以使用正则表达式来解决这个问题,但我的问题是是否有任何直接的方法来获取Stringlong值?

最佳答案

你说你想要一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com