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

标签 java

我有一个 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/

相关文章:

java - FreeMarker 模板错误!在 struts2 中

java - OpenCV java.lang.UnsatisfiedLinkError

java - Java默认路径在哪里设置?

java - TransactionManager 已使用 EclipseLink JPA 在 Spring Batch 中定义

java - 如何使用 selenium webdriver 从列表框中移动项目

java - 如何从 Java 语言环境的时区获取日期模式

java - STS、SAML 和 Java SDK 无法从链中的任何提供商加载 AWS 凭证

java - Servlet >3.0 上的 NoSuchMethodError HttpServletRequest.getServletContext()

java - 使用 REST 或 Web 服务上传/下载文件

java - JPA:合并和持久化上下文