簡述
項目中有時候需要判斷一個String 的字符串能不能轉換成 int,我在搜索引擎上搜索到時候發現有人問過同樣的問題,但是回答者會有String 怎么能轉換成Integer 的疑問,這里標注一下,同時也為了以后自己看到時候不要引起誤導。這里說的是,例如 String str1 = 123 或者 String str2 = 0.44 這樣的String, 可以說它們是String 類型的數字。
解決方法
方法一:正則表達式
我們可以通過正則表達式,判斷接收到的String 中有沒有字母從而來判斷這個String 能否轉換成 int,這里就不把正則表達式附上了,網上有很多,畢竟菜鳥,自己寫怕遺漏了什么。。
方法二:StringIndexOutOfBoundsException 異常
當把不能轉換成 int 的String 強制轉換的時候,會拋出 StringIndexOutOfBoundsException 異常,我們可以將錯就錯,利用這個異常,即,如果拋出了此異常則 該String 不能轉換成 int,否則可以。
String date = 201311;try {
int year =Integer.valueOf(date.substring(0, 4));
int month=Integer.valueOf(date.substring(4,6));
// 如果沒拋出異常,則 date 可以正確轉換成 int
}catch(StringIndexOutOfBoundsException e){
// 如果拋出異常,則 date 不能轉換成 int
}
但這種靠異常來判斷的做法感覺不是很好。
方法三:工具類 NumberUtils(推薦) 在 commons-lang.jar 中,有個Util 類, NumberUtils,其中包括兩個方法:
1.NumberUtils.isDigits(String str)Checks whether the String contains only digit characters.Null and empty String will return false.Parameters:str the String to checkReturns:true if str contains only Unicode numeric
2.NumberUtils.isNumber(String str)Checks whether the String a valid Java number.Valid numbers include hexadecimal marked with the 0x qualifier, scientific notation and numbers marked with a type qualifier (e.g. 123L).Null and empty String will return false.Parameters:str the String to checkReturns:true if the string is a correctly formatted number
正如描述中說的:
NumberUtils.isDigits(str) //判斷str是否整數, true-整數 false-非整數
NumberUtils.isNumber(str) //判斷str是否數字(整數、小數、科學計數法等等格式)
自己寫正則表達式擔心出錯的同學可以試試這個工具類,雖然 工具類也是人寫的也可能出錯,但發布出來,用的人多,估計有錯誤也會更快被發現,如果還不放心也可以先看看其中的源碼。
另外,commons-lang.jar 除了包含這一個 Utils 之外還有很多,如 ArrayUtils,BooleanUtils,CharSequenceUtils 等,在此不一一列舉。commons-lang.jar 的下載地址可以到
下載