Java从字符串中解析长

标签 java string parsing

我目前正在尝试解析一些在 java 中存储为字符串的长值,我遇到的问题是:

String test = "fffff8000261e000"
long number = Long.parseLong(test, 16);

这会抛出一个 NumberFormatException:

java.lang.NumberFormatException: For input string: "fffff8000261e000"

但是,如果我敲掉字符串中的第一个“f”,它会很好地解析它。

我猜这是因为数字很大,我通常会做的是在 long 的末尾加上一个“L”来解决这个问题。但是,在从字符串解析 long 时,我无法找出最佳方法。

有人可以提供任何建议吗?

谢谢

最佳答案

有两种不同的方式来回答您的问题,具体取决于您真正寻找的行为类型。

答案 #1:正如其他人所指出的,您的字符串(解释为 正数 十六进制整数)对于 Java long 来说太大了。类型。所以如果你真的需要那么大的(正)整数,那么你需要使用不同的类型,也许是 java.math.BigInteger ,它还有一个构造函数采用 String和基数。

答案 #2:不过,我想知道您的字符串是否表示 long 的“原始”字节.在您的示例中,它将代表一个负数。如果是这样,那么 Java 的内置 long解析器不处理设置高位的值(即 16 位字符串的第一个数字大于 7)。

如果您遇到的是第 2 种情况,那么这里有一种(相当低效的)处理方式:

String test = "fffff8000261e000";
long number = new java.math.BigInteger(test, 16).longValue();

产生值 -8796053053440 . (如果您的字符串长度超过 16 位十六进制数字,它会默默地丢弃任何更高的位。)

如果效率是一个问题,您可以编写自己的位旋转例程,一次从字符串末尾取出两个十六进制数字,也许构建一个字节数组,然后转换为 long。一些类似的代码在这里:

How to convert a Java Long to byte[] for Cassandra?

关于Java从字符串中解析长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216824/

相关文章:

java - 遇到时间错误(Java)

java - 将 AOP 与 OSGI 结合使用的最佳解决方案?

python - 在 Python 中解析文件

android - 解析 XML 时出错 : not well formed(invalid token)

html - 正则表达式匹配 HTML 中的属性?

java - Android 应用程序首选项中的值是否会自动保存?

java - The Method is undefined for the type object 错误

javascript - 使用正则表达式转义单词开头和冒号之间的特殊字符

c - 函数返回意外值

java - 如何在 Java 中将字符串转换为 SOAPMessage?