【问题标题】:Efficiently convert a long string to long in Java在 Java 中有效地将长字符串转换为长字符串
【发布时间】:2010-12-25 03:11:00
【问题描述】:

我确实有很长的字符序列,例如 123222222222230000000000001。我想将其转换为长字符。在 Java 中最有效的方法是什么?

更新:序列的最大长度为 31 个字符

【问题讨论】:

  • 这里说的是十进制,对吧?不是八进制。
  • 如前所述,没有直接的方法可以将 31 位十进制数字放入 long 中。不知何故,它需要被转换(只使用最低/最高有效数字,使用 2 个长整数,或者......)。关于该号码将用于什么的提示会很有帮助。

标签: java types type-conversion


【解决方案1】:

BigDecimal
也可用于将字符串转换为长整数。

【讨论】:

  • 但不是他心目中的 31 位字符串。这些都太长了。
【解决方案2】:

不能将 31 位数字放入 long 中,仅供参考:

 long primitive = Long.parseLong(longString); 
 Long object = Long.valueOf(longString);

【讨论】:

  • 第一行抛出错误。所以我很确定这不起作用
  • java.lang.NumberFormatException
  • 那是因为你的号码“太长”了。您需要使用 BigInteger。
【解决方案3】:

首先,像这样的字符串值永远不会适合long(它太大了),

您将需要使用BigInteger 类型和constructor that accepts a String parameter

翻译十进制字符串 将 BigInteger 表示为 大整数。字符串表示 由一个可选的减号组成 后跟一个或多个序列 十进制数字。字符到数字 映射由提供 字符.数字。 字符串可能不会 包含任何无关字符 (例如空格)。

【讨论】:

  • 真的。示例字符串“太长”。
  • 对不起,它比要求的太长,我需要转换的最大长度为 31 个字符
  • 鉴于 Long.MAX_VALUE = 2^63 - 1,其中有 19 位数字,它仍然不可能适合 long。按照建议使用 BigInteger。
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 2012-09-19
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
相关资源
最近更新 更多