You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中read-string解析01-07正常,解析08报错原因咨询

为什么(read-string "08")会抛出NumberFormatException?

这个问题其实和Clojure底层解析数字的规则有关,我来给你拆解清楚:

  • 以0开头的数字会被默认解析为八进制数
    Clojure的read-string函数依赖clojure.lang.LispReader处理字符串解析,当它遇到以0开头的数字字符串时,会默认将其当作八进制数解析。八进制数的基数是8,每一位只能是0到7之间的有效数字,这就是为什么"01"到"07"都能正常解析成对应的十进制数值(比如"07"会被转成7)。

  • 08不符合八进制数的规则
    八进制数里根本没有8这个数字,所以当解析"08"时,LispReader会判定这是一个无效的八进制数,直接抛出NumberFormatException,提示Invalid number: 08。

  • 如果需要解析以0开头的十进制数怎么办?
    如果你实际需求是把"08"当作十进制数解析,可以用两种方式:

    1. 使用Java的工具方法显式指定基数:(Integer/parseInt "08" 10)
    2. 在字符串里加上十进制标记10r:(read-string "10r08"),这样Clojure就会按照十进制规则解析这个数字。

内容的提问来源于stack exchange,提问作者Aman shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:50:06