StringUtils.isNumeric使用

    在做导入/导出功能时,客户要求导出数字类型的值时,将excel相应单元格属性设为number型,由此需判断字符串值是否为数字,代码如下:

public static boolean isNumber(String number) {int index = number.indexOf(".");
        if (index < 0) {
            return StringUtils.isNumeric(number);
        } else {
            String num1 = number.substring(0, index);
            String num2 = number.substring(index + 1);

            return StringUtils.isNumeric(num1) && StringUtils.isNumeric(num2);
        }
    }

 

网上查"java 判断字符串为数字"阅资料,大部分资料都在讲字符串转为整数的情况,很少资料提及关于负数和小数的情况,最终决定采用StringUtils.isNumberic这个方法差别,

在测试导出时发现有报错,用debug模块一点点追踪,发现StringUtils.isNumeric会将空字符串返回true,先这样解决一下:

public static boolean isNumber(String number) {
        if(number==null || "".equals(number))
            return false;
        int index = number.indexOf(".");
        if (index < 0) {
            return StringUtils.isNumeric(number);
        } else {
            String num1 = number.substring(0, index);
            String num2 = number.substring(index + 1);

            return StringUtils.isNumeric(num1) && StringUtils.isNumeric(num2);
        }
    }

网上继续查找,这个方法怎么会有这种情况,最终在官网上找到其他程序员提出的这个问题及java开发团队的回答(原文链接:https://issues.apache.org/jira/browse/LANG-428 ),可能在未来某个版本中会把这个问题给解决掉,在此记录下。

 

转载于:https://www.cnblogs.com/bingya/p/3164472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您提供的代码片段,可以看出在switch语句中,当`productType`既不是`FUTURE`也不是`STOCK`时,应该进入`default`分支。但是,如果在上述两个`case`中的某个情况下,`symbol`已经被赋值了,那么程序将不会进入`default`分支。 这是因为一旦在`case`分支中的条件满足时,程序会执行相应的代码块,并跳出`switch`语句。所以如果在`FUTURE`或`STOCK`的情况下已经赋值了`symbol`,则不会进入`default`分支。 如果您希望在未匹配到任何`case`时进入`default`分支并设置`symbol`的值,可以将相应的条件检查移到外部,或者使用一个标记来判断是否已经进入了某个`case`分支。 例如,可以尝试以下修改: ```java boolean isMatched = false; // 添加一个标记来表示是否匹配到合适的条件 switch (productType) { case FUTURE: if (contractId.length() == 6 && !StringUtils.isNumeric(String.valueOf(contractId.toCharArray()[1]))) { symbol = contractId.substring(0, 2) + contractId.substring(3) + PMPConstants.SYMBOL_DOT + exchange; isMatched = true; } break; case STOCK: if (ExchangeEnum.HK.equals(ExchangeEnum.ofInner(exchange)) && contractId.length() > 4 && StringUtils.startsWith(contractId, "0")) { symbol = contractId.substring(1) + PMPConstants.SYMBOL_DOT + exchange; isMatched = true; } break; } if (!isMatched) { symbol = contractId + PMPConstants.SYMBOL_DOT + exchange; } ``` 这样可以确保如果没有匹配到任何`case`分支时,会进入`default`分支并设置`symbol`的值。 希望这可以回答您的问题。如果您有任何进一步的疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值