一尘不染

确定字符串在Java中是否为整数

java

我正在尝试确定字符串数组中的特定项目是否为整数。

我是形式上.split(" ")'ing的中缀表达式String,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。做到这一点的最佳方法是什么?

我以为我也许可以找到一种Integer.isInteger(String arg)方法或某种方法,但是没有运气。


阅读 337

收藏
2020-03-01

共1个答案

一尘不染

最幼稚的方式是遍历String并确保所有元素对于给定的基数都是有效数字。由于你必须至少查看一次每个元素,因此这将尽可能地提高效率。我想我们可以基于基数对其进行微优化,但是就所有意图和目的而言,这都是你所期望的那样好。

public static boolean isInteger(String s) {
    return isInteger(s,10);
}

public static boolean isInteger(String s, int radix) {
    if(s.isEmpty()) return false;
    for(int i = 0; i < s.length(); i++) {
        if(i == 0 && s.charAt(i) == '-') {
            if(s.length() == 1) return false;
            else continue;
        }
        if(Character.digit(s.charAt(i),radix) < 0) return false;
    }
    return true;
}

另外,你可以依靠Java库来实现。它不是基于异常的,并且将捕获几乎所有你能想到的错误条件。它会贵一些(你必须创建一个Scanner对象,该对象在严格的紧缩循环中是你不希望做的。但是通常情况下,它不应该太贵,所以每天操作它应该是相当可靠的。

public static boolean isInteger(String s, int radix) {
    Scanner sc = new Scanner(s.trim());
    if(!sc.hasNextInt(radix)) return false;
    // we know it starts with a valid int, now make sure
    // there's nothing left!
    sc.nextInt(radix);
    return !sc.hasNext();
}

如果最佳实践对你来说并不重要,或者你想招揽进行代码审查的人员,请尝试以下操作以获取大小:

public static boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    } catch(NullPointerException e) {
        return false;
    }
    // only got here if we didn't return false
    return true;
}
2020-03-01