【问题标题】:Scala Converting multiline string to BigIntScala将多行字符串转换为BigInt
【发布时间】:2013-06-10 01:02:27
【问题描述】:

我正在尝试使用以下代码从字符串中解析 100 个 50 位数字:

val input = """37107287533902102798797998220837590246510135740250
          |46376937677490009712648124896970078050417018260538
          |74324986199524741059474233309513058123726617309629""".stripMargin
val list = input.split("""\n""").map(BigInt(_))

但我以“java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)”结尾。我不知道为什么这不起作用,因为当拆分字符串时,列表的每个元素都是字符串类型。任何帮助将不胜感激。

最好的问候

【问题讨论】:

  • 我试过你的代码,没有错误(scala 2.10.0)。你确定你提供了正确的代码片段吗?
  • Here is the online results(点击右上角的绿色按钮)
  • 您可能需要修剪字符串,因为尾随空格会破坏 BigInt。
  • 你能把整个堆栈跟踪放到你的帖子中吗?来自异常的消息表明导致失败的字符串是什么,但我在您发布的内容中看不到这一点。这可能是了解为什么您会收到此异常而我们其他人没有的线索。
  • 你发音为 skaLAkata 吗?无论如何,scalakata.com/51ba2dd0e4b0ea2d637b8fa3 想象一个不同的 EOL。感谢 linx。

标签: string scala type-conversion bigint


【解决方案1】:

您可能在 Windows 上,EOL 为 \r\n。

你也必须去掉它。

在这里,我重新启动到 Windows 进行演示...

apm@halyard ~/tmp
$ vi bigbomb.scala

apm@halyard ~/tmp
$ skalac bigbomb.scala ; skala bigbomb.Test
"ava.lang.NumberFormatException: For input string: "35740250
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

请注意,在 cygwin 中,我必须在 vi 中 :se fileformat=dos 才能使用 \r\n 行尾。

这是一个示例,其中源 EOL 和运行时 EOL 之间未确认的阻抗不匹配困扰了我:

some dumb code

您想使用s.lines.mkString 将其删除。

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2019-10-31
    • 2021-10-08
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多