在 Java 中检查字符串是否表示整数的最佳方法是什么?

2022-08-31 05:37:06

我通常使用以下习语来检查字符串是否可以转换为整数。

public boolean isInteger( String input ) {
    try {
        Integer.parseInt( input );
        return true;
    }
    catch( Exception e ) {
        return false;
    }
}

是只有我,还是这看起来有点黑客?什么是更好的方法?


看看我的答案(基于CoundingWithSpike的早期答案,带有基准测试),看看为什么我改变了立场并接受了Jonas Klemming对这个问题的回答。我认为大多数人会使用这个原始代码,因为它实现得更快,更易于维护,但是当提供非整数数据时,它的速度要慢几个数量级。


答案 1

如果您不担心潜在的溢出问题,则此功能的执行速度将比使用 快 20-30 倍。Integer.parseInt()

public static boolean isInteger(String str) {
    if (str == null) {
        return false;
    }
    int length = str.length();
    if (length == 0) {
        return false;
    }
    int i = 0;
    if (str.charAt(0) == '-') {
        if (length == 1) {
            return false;
        }
        i = 1;
    }
    for (; i < length; i++) {
        char c = str.charAt(i);
        if (c < '0' || c > '9') {
            return false;
        }
    }
    return true;
}

答案 2

你有它,但你只应该抓住.NumberFormatException