为了账号安全,请及时绑定邮箱和手机立即绑定

确定字符串是否是Java中的整数

确定字符串是否是Java中的整数

慕无忌1623718 2019-07-03 14:35:45
确定字符串是否是Java中的整数我试图确定字符串数组中的特定项是否为整数。我是.split(" ")'ing中的内嵌表达式String窗体,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时舍弃括号和其他杂项。实现这一目标的最佳方法是什么?我想我也许能找到一个Integer.isInteger(String arg)方法之类的,但没有这样的运气。
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

最天真的方法是迭代字符串,并确保所有元素都是给定基数的有效数字。这是尽可能高效的,因为您必须至少查看每个元素一次。我想我们可以在基数的基础上对它进行微优化,但是对于所有的意图和目的,这都是你所期望得到的最好的结果。

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库来实现这个功能。它不是基于异常的,它将捕获几乎所有您能想到的错误条件。它会更加昂贵(您必须创建一个Scaner对象,在一个非常紧的循环中,您不想这样做。)但是通常情况下,它不应该太贵,所以对于日常操作来说,它应该是相当可靠的。

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


查看完整回答
反对 回复 2019-07-03
?
呼如林

TA贡献1798条经验 获得超3个赞

或者,您可以从Apache Commons的好朋友那里寻求一些帮助:StringUtils.isNDigic(StringStr)


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 417 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信