Android上的Integer.parseInt和NumberFormatException

时间:2015-05-06 08:38:21

标签: java android

我在Android应用中运行了以下代码

Integer.parseInt("+91");

Android 5.0(Lollipop)中, 没有 抛出任何异常,因为+91是一个整数。但是在Android 4.4.x(KitKat)和更低版本中它会抛出:

  

NumberFormatException:无效的Int:" + 91"

Android的版本如何导致这种差异?

4 个答案:

答案 0 :(得分:45)

Mac OS UI guidelines中添加了对明确+的支持:

Support explicit + in Byte, Short, Integer, Long.

Bug: 5239391
Change-Id: I2b25228815d70d570d537db0ed9b5b759f25b5a3

android-5.0.0_r1开头。如果您已获取Git存储库,则可以使用以下命令进行验证:

git tag --contains 6b40837ee3a023bba698c38fd6d6e46ae0065a55

给你

android-5.0.0_r1
android-5.0.0_r2
android-5.0.0_r3
...

尽管文档可以深入了解为什么进行了更改(为了实现Java 7的行为,正如其他答案所指出的那样),分析源代码的历史记录可以为提供最准确的答案>当行为发生变化时,因为文档不一定与实现相匹配。

答案 1 :(得分:23)

此行为实际上是Java 7的一部分,因为docs状态:

  

将字符串参数解析为带符号的十进制整数。那些角色   在字符串中必须都是十进制数字,除了第一个   字符可以是ASCII减号' - ' (' \ u002D')表示a   负值或ASCII加号' +' (' \ u002B')表示a   正值。

但是,在Java 6中只接受了-符号。

Android SDK 21+具有JDK7依赖关系,这可能是您遇到此行为的原因。

答案 2 :(得分:10)

它适用于Java 7。

Android 5引入了新的parseInt功能,如Java 7版本 - Martin Nordholts's answer points exactly the revision

所以这意味着你的Lollipop使用了一个基于Java 7的更新的sdk,它也有parseInt方法和符号处理部分。

KitKat确实将some java 7 features引入Android sdk 19,但不是新的parseInt。较低版本使用较早的parseInt实现(Java 6的版本),因此它们显然也会失败。

parseInt实现之间的区别:  Java 6 parseInt documentation vs Java 7 parseInt documentation

答案 3 :(得分:5)

这是一个特定于Java的问题。正如您在文档中看到的那样,Java 6允许-Java 7允许+-

使用Android版本19(KitKat)支持Java 7,因此您不会收到此错误。我建议不要使用+,因为如果你有一个负整数,你只需要一个符号。