在做導入/導出功能時,客戶要求導出數字類型的值時,將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 ),可能在未來某個版本中會把這個問題給解決掉,在此記錄下。