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

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

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


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


当前回答

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

其他回答

这对我很有用。简单地识别字符串是原语还是数字。

private boolean isPrimitive(String value){
        boolean status=true;
        if(value.length()<1)
            return false;
        for(int i = 0;i<value.length();i++){
            char c=value.charAt(i);
            if(Character.isDigit(c) || c=='.'){

            }else{
                status=false;
                break;
            }
        }
        return status;
    }

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

对于kotlin,字符串的isDigitsOnly()(同样对于Java的TextUtils.isDigitsOnly())总是返回false,它前面有一个负号,尽管字符的其余部分仅为数字。例如:

/** For kotlin*/
var str = "-123" 
str.isDigitsOnly()  //Result will be false 

/** For Java */
String str = "-123"
TextUtils.isDigitsOnly(str) //Result will be also false 

所以我做了一个快速的修正

 var isDigit=str.matches("-?\\d+(\\.\\d+)?".toRegex()) 
/** Result will be true for now*/

要检查所有int字符,可以简单地使用双重否定。

如果

[^0-9]+$检查是否有非整数字符,因此如果为真,则测试失败。只要不是那样,你就会获得真正的成功。

org.apache.commons.lang.StringUtils.isNumeric 

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

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

可惜它还没有移植到Java5