我通常使用以下习惯用法来判断字符串是否可以转换为整数.

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

是我一个人干的,还是这看起来有点老套?有什么更好的方法?


看看我的答案(基于earlier answerCodingWithSpike的基准),看看我为什么改变立场,接受Jonas Klemming's answer来解决这个问题.我认为这段原始代码将被大多数人使用,因为它实现起来更快,更易于维护,但当提供非整数数据时,它的速度要慢几个数量级.

推荐答案

如果您不关心潜在的溢出问题,此函数的执行速度将比使用Integer.parseInt()快约20-30倍.

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;
}

Java相关问答推荐

基于仅存在于父级中的字段查询子文档?

我可以从Java模块中排除maven资源文件夹吗?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

为什么我的画布没有显示在PFA应用程序中?

Java在模块化jar文件中找不到类,但是javap可以

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

如何让JFileChooser(DIRECTORIES_ONLY)从FolderName中的空白开始?

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

蒙蒂霍尔比赛结果不正确

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

如何在Application.yaml中连接字符串?

如何仅使用键/ID的一部分(组合)高效地返回映射值?

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

EXCEL中的公式单元格显示#NAME?

无限递归Java问题

Bash数组的单引号元素并使用空格连接

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

如何使用我的RLE程序解决此问题

Spring Integration SFTP 连接失败 - 无法协商 kex 算法的密钥交换