Java 8:为什么我不能将这个二进制字符串解析成一个长整数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 8:为什么我不能将这个二进制字符串解析成一个长整数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1610字,纯文字阅读大概需要3分钟。
内容图文
长话短说,我在弄乱Java中的一些基本遗传算法.我用了很长时间来存储基因,但调试时却使用二进制字符串以提高可读性.我遇到了一种奇怪的情况,我无法解析一些以1开头的二进制字符串(我不知道是否总是这样,但这似乎与64个字符的字符串一致).
我可以通过以下示例复制它:
String binaryString = Long.toBinaryString(Long.MIN_VALUE);
long smallestLongPossibleInJava = Long.parseLong(binaryString, 2);
它将抛出并产生以下堆栈跟踪:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1000000000000000000000000000000000000000000000000000000000000000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:592)
at com.company.Main.main(Main.java:25)
鉴于我有正确格式的长度为64个字符的二进制字符串,为什么不能将某些字符串解析为很长的长度?在大多数情况下,我的字符串是随机生成的,但是在上面的实例中这应该起作用(请参见Long.MIN_VALUE在Java中绝对是有效的long).
解决方法:
引用Long.toBinaryString(i) Javadoc(重点是我的):
Returns a string representation of the long argument as an unsigned integer in base 2.
并引用Long.parseLong(s, radix)(重点是我的):
Parses the string argument as a signed long in the radix specified by the second argument.
问题来自于这样的事实,即toBinaryString返回一个无符号值,而parseLong需要一个有符号值.
您应该改用Long.parseUnsignedLong(s, radix):
String binaryString = Long.toBinaryString(Long.MIN_VALUE);
long smallestLongPossibleInJava = Long.parseUnsignedLong(binaryString, 2);
请注意,实际上在toBinaryString Javadoc中明确指出了这一点:
The value of the argument can be recovered from the returned string
s
by callingLong.parseUnsignedLong(s, 2)
.
内容总结
以上是互联网集市为您收集整理的Java 8:为什么我不能将这个二进制字符串解析成一个长整数?全部内容,希望文章能够帮你解决Java 8:为什么我不能将这个二进制字符串解析成一个长整数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。