在 Java 中判断一个字符串是否是一个整数

新手上路,请多包涵

我正在尝试确定字符串数组中的特定项目是否为整数。

我是 .split(" ")String 形式中缀表达式,然后尝试将结果数组拆分为两个数组;一种用于整数,一种用于运算符,同时丢弃括号和其他杂项。实现这一目标的最佳方法是什么?

我以为我可以找到一个 Integer.isInteger(String arg) 方法或其他东西,但没有这样的运气。

原文由 Nick Coelius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 565
2 个回答

最天真的方法是遍历字符串并确保所有元素都是给定基数的有效数字。这是尽可能高效的,因为您必须至少查看每个元素一次。我想我们可以根据基数对其进行微优化,但就所有意图和目的而言,这与您期望的一样好。

 public static boolean isInteger(String s) {
    return isInteger(s,10);
}

public static boolean isInteger(String s, int radix) {
    if(s.isEmpty()) return false;
    for(int i = 0; i < s.length(); i++) {
        if(i == 0 && s.charAt(i) == '-') {
            if(s.length() == 1) return false;
            else continue;
        }
        if(Character.digit(s.charAt(i),radix) < 0) return false;
    }
    return true;
}

或者,您可以依赖 Java 库来获得它。它不是基于异常的,并且会捕获您能想到的几乎所有错误情况。它会有点贵(你必须创建一个 Scanner 对象,在一个你不想做的非常紧凑的循环中。但它通常不应该太贵,所以对于日常操作应该是相当可靠的。

 public static boolean isInteger(String s, int radix) {
    Scanner sc = new Scanner(s.trim());
    if(!sc.hasNextInt(radix)) return false;
    // we know it starts with a valid int, now make sure
    // there's nothing left!
    sc.nextInt(radix);
    return !sc.hasNext();
}

如果最佳实践对你来说无关紧要,或者你想挑逗做代码审查的人,试试这个大小:

 public static boolean isInteger(String s) {
    try {
        Integer.parseInt(s);
    } catch(NumberFormatException e) {
        return false;
    } catch(NullPointerException e) {
        return false;
    }
    // only got here if we didn't return false
    return true;
}

原文由 corsiKa 发布,翻译遵循 CC BY-SA 3.0 许可协议

最好像这样使用正则表达式:

 str.matches("-?\\d+");


 -?     --> negative sign, could have none or one
\\d+   --> one or more digits

这里用 NumberFormatException 不好用 if-statement 代替。

如果你不想前导零,你可以使用正则表达式如下:

 str.matches("-?(0|[1-9]\\d*)");

原文由 shuangwhywhy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题