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

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

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


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


当前回答

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

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

其他回答

Integer.valueOf(string); 

大部分时间对我都管用!

Number number;
try {
    number = NumberFormat.getInstance().parse("123");
} catch (ParseException e) {
    //not a number - do recovery.
    e.printStackTrace();
}
//use number

你也可以使用Scanner类,并使用hasNextInt() -这也允许你测试其他类型,如浮点数等。

这更短,但更短并不一定更好(它不会捕获超出范围的整数值,正如danatel的评论所指出的那样):

input.matches("^-?\\d+$");

就我个人而言,由于实现被保存在一个helper方法中,并且正确性胜过长度,所以我将使用类似于您所拥有的东西(减去捕获基Exception类而不是NumberFormatException)。

我在这里看到了很多答案,但他们中的大多数都能够确定字符串是否为数字,但他们无法检查数字是否在整数范围内…

因此我的目的是这样的:

public static boolean isInteger(String str) {
    if (str == null || str.isEmpty()) {
        return false;
    }
    try {
        long value = Long.valueOf(str);
        return value >= -2147483648 && value <= 2147483647;
    } catch (Exception ex) {
        return false;
    }
}