Java中整数和字符串决策的比较

4
我正在处理一个程序,用户输入的是一个包含混合字符串和整数的数组。例如:
dog 10 23 cat frog 22 elephant
我需要对这个数组进行排序,但不能改变每个索引的类型。所以输出将是:
cat 10 22 dog elephant 23 frog
在从控制台读取行后,我使用字符串分割器来遍历每个元素。之后,我尝试使用parseInt,如果它抛出异常,则假定它是一个字符串,否则它是一个整数。有没有更好的方法来判断一个标记是否为数字?
谢谢。
3个回答

6

关于在正常程序流程中不依赖异常。@Mehmet:如果你想允许负数,可以在正则表达式开头的^后面加上-?(表示“零个或一个-字符”)。 - T.J. Crowder
4
我不同意。例外情况会降低运行速度,但在必要时再进行优化。我会编写一个私有的静态方法isNumber,并使用try/parseInt/catch块来实现它。如果这个方法运行速度太慢,很容易进行替换。 - Keith Randall
@KeithRandall:这不是优化。如果你要写isNumber,为什么不一开始就写好呢?如果有任何重要的工作需要完成,那当然不要过早地进行优化,尽管我对在超过50%的正常程序流程中使用异常非常谨慎(根据OP的示例)。但在这里,实际上并没有这样的情况。 - T.J. Crowder

3

使用parseInt并不是一个坏主意。

或者你可以使用正则表达式,但我相信你的选择更加实用和简单。


“更实用和快速” 不是更快,所有这些由非数字输入引起的异常情况都是“正常”的情况… - T.J. Crowder
我在我的机器上进行了检查,正则表达式比parseInt快大约5倍。使用parseInt,我可以在780毫秒内解析100万个字符串,在140毫秒内解析。因此,如果您需要检查少量值,则应使用parseInt。 - dash1e

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接