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

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

是我的错觉,还是你觉得这有点粗俗?还有什么更好的办法吗?


看看我的回答(带有基准,基于CodingWithSpike之前的回答),看看为什么我改变了立场,接受了Jonas Klemming对这个问题的回答。我认为大多数人都会使用这个原始代码,因为它实现起来更快,也更易于维护,但是当提供非整数数据时,它就慢了几个数量级。


当前回答

这可能会有帮助:

public static boolean isInteger(String self) {
    try {
        Integer.valueOf(self.trim());
        return true;
    } catch (NumberFormatException nfe) {
        return false;
    }
}

其他回答

如果你的String数组包含纯整数和字符串,下面的代码应该可以工作。你只需要看第一个字符。 例如(“4”、“44”、“abc”,“77”,“债券”)

if (Character.isDigit(string.charAt(0))) {
    //Do something with int
}

这只适用于正整数。

public static boolean isInt(String str) {
    if (str != null && str.length() != 0) {
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) return false;
        }
    }
    return true;        
}
org.apache.commons.lang.StringUtils.isNumeric 

尽管Java的标准库确实缺少这样的实用函数

我认为Apache Commons是每个Java程序员的“必备”

可惜它还没有移植到Java5

您拥有它,但是您应该只捕获NumberFormatException。

你所做的是有效的,但你可能不应该总是这样检查。抛出异常应该为“异常”情况保留(不过,可能适合您的情况),并且在性能方面代价非常高。