在做导入/导出功能时,客户要求导出数字类型的值时,将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 ),可能在未来某个版本中会把这个问题给解决掉,在此记录下。