【问题标题】:Check if a String is Integer [duplicate]检查字符串是否为整数 [重复]
【发布时间】:2016-02-18 20:55:33
【问题描述】:

我需要检查字符串是否为整数。我找到了这样的解决方案:

private boolean isInteger(String str) {
    try {
        Integer.parseInt(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

没有 try/catch 子句,有没有更漂亮、更合适的方法来做到这一点?

【问题讨论】:

  • 你考虑过正则表达式吗?
  • 您发布的代码非常糟糕,因为它“滥用”了异常处理
  • 我觉得这个解决方案非常漂亮。为什么它应该“滥用”异常处理?
  • 这个问题太宽泛而且基于观点。没有客观上“更漂亮”的代码这样的东西。只有对与错。请注意,给出的两个答案是错误(嗯,有点错误)。
  • @MarioA “为什么它应该“滥用”异常处理? => 因为异常应该用于异常情况而不是正常的执行流程(Joshua Bloch,Effective Java,Item 57)。

标签: java


【解决方案1】:

你可以试试这样的正则表达式:

代码

private boolean isInteger(String str) {
    return str.matches("\\-?\\d+");
}

编辑

感谢@Maloubobola 指出我的第一次尝试不会解析有符号整数。

【讨论】:

  • 这引入了一个微妙的错误:Long 会匹配,而 OP 问题中的代码不会。
  • 图纳基是对的。也许添加额外的整数最小值/最大值检查
【解决方案2】:

你可以试试正则表达式。这是正数和负数的一种

private boolean isInt(String string) {
    return string.matches("-?\\d+");
}

【讨论】:

  • 这引入了一个微妙的错误:Long 会匹配,而 OP 问题中的代码不会。
  • 对。我没有考虑。也许检查最小/最大值,或限制位数。整数的最大值是 2147483647,其中包含 10 位数字,因此在某些情况下(例如,您确定您的整数不是 10 位长)您可以使用 string.matches("-?\\d{1,9}");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2011-11-27
  • 2021-07-10
  • 2014-02-22
相关资源
最近更新 更多