【发布时间】:2016-01-30 06:36:48
【问题描述】:
此问题是Does java have a int.tryparse that doesn't throw an exception for bad data? 的后续问题,被标记为与Java: Good way to encapsulate Integer.parseInt() 重复。
这两个问题似乎更多地是关于如何捕获Integer.parseInt() 抛出的NumberFormatException 或通过封装Integer.parseInt() 来提供不使用异常的更好的API。
但两者都没有专门针对性能方面的问题,即如果输入不可解析为int,Java 的Integer.parseInt() 会引发异常。如果您的大部分输入由有效的ints 组成,这无关紧要。但是,如果您的输入包含大量可能是也可能不是ints 的数据并且您需要对其进行解析,那么Integer.parseInt() 将是低效的。
所以这个特定的问题是关于如何有效地解析整数,因为输入可以包含很多有效的整数,但也可以包含很多无效的整数。
【问题讨论】:
-
如果你期望有很多不是整数的东西,多解释一下你的数据流可能会有所帮助。一种简单的方法是匹配
-?\d+之类的正则表达式。 -
你可以重写parseInt。您可以使用 parseint 的 openjdk 实现作为基础,并在 int 无效时执行不引发异常的操作。这个问题stackoverflow.com/questions/299068/how-slow-are-java-exceptions 与抛出异常的表现有关
-
我把我自己的答案放在下面。创建这个新问题的目的是解决我提到的其他两个问题没有正确解决的方面。无需重写
parseInt(),因为 Google 为我们完成了它;) -
我不确定我是否理解,抛出异常有什么问题?如果发生了,处理有没有什么低效的?
-
@AshwinGupta cf 我链接的问题。抛出异常非常繁重。
标签: java