我通常使用以下习语来检查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
}

其他回答

这可能会有帮助:

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

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

另一个选择:

private boolean isNumber(String s) {
    boolean isNumber = true;
    for (char c : s.toCharArray()) {
        isNumber = isNumber && Character.isDigit(c);
    }
    return isNumber;
}

这部分取决于你所说的“可以转换为整数”是什么意思。

如果你的意思是“可以在Java中转换为int型”,那么Jonas的回答是一个很好的开始,但并没有完全完成工作。例如,它会通过9999999999999999999999999999999999。我会在方法的末尾添加来自您自己的问题的正常try/catch调用。

逐字符检查将有效地拒绝“根本不是整数”的情况,留下“它是整数但Java不能处理它”的情况,由较慢的异常路由捕获。你也可以用手来做,但会复杂得多。

如何:

return Pattern.matches("-?\\d+", input);