一,使用StringUtils工具類;
通過StringUilts工具包進(jìn)行判斷:
org.Apache.commons.lang3.StringUtils提供了豐富的字符串解析的工具包,其中isNumeric(String Str)就是提供解析是否為數(shù)字類型的方法,具體如何操作,請(qǐng)看下面案例:
該方式只能校驗(yàn)不含負(fù)號(hào)“-”的數(shù)字,即輸入一個(gè)負(fù)數(shù)-199,輸出結(jié)果將是false;
import org.apache.commons.lang3.StringUtils; /** * @author 歪歪 * @version 1.0 * @date 2020/12/11 10:24 */public class NumberDemo { /** * 判斷是否為數(shù)字可以使用工具類 StringUtils * 通過方法 isNumeric 進(jìn)行判斷是否為數(shù)字 * @param str * @return */ private static boolean isNumber(String str) { return StringUtils.isNumeric(str); }}
接下來我們查看一下isNumeric的源代碼,代碼如下:
public static boolean isNumeric(final CharSequence cs) { // 判斷是否為空,如果為空則返回false if (isEmpty(cs)) { return false; } // 通過 length() 方法計(jì)算cs傳入進(jìn)來的字符串的長度,并將字符串長度存放到sz中 final int sz = cs.length(); // 通過字符串長度循環(huán) for (int i = 0; i < sz; i++) { // 判斷每一個(gè)字符是否為數(shù)字,如果其中有一個(gè)字符不滿足,則返回false if (!Character.isDigit(cs.charAt(i))) { return false; } } // 驗(yàn)證全部通過則返回true return true; }
不難發(fā)現(xiàn)他是通過循環(huán)判斷每一個(gè)字符,如果有一個(gè)字符不是數(shù)字,那么就返回false。
二,使用ACSII碼;
public static boolean isNumeric(String str){ for(int i=str.length();--i>=0;){ int chr=str.charAt(i); if(chr<48 || chr>57) return false; } return true;}
三,使用JAVA自帶的函數(shù);
這個(gè)方式三的原理和方式一中的StringUtils.isNumeric()是一樣的。
該方式只能校驗(yàn)不含負(fù)號(hào)“-”的數(shù)字,即輸入一個(gè)負(fù)數(shù)-199,輸出結(jié)果將是false;
public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; }
三,捕捉異常;
通過try....catch 也可以實(shí)現(xiàn)字符串是否為數(shù)字的判斷,但是不推薦此方法,不建議使用異常做常規(guī)業(yè)務(wù)處理邏輯。
/** * @author 歪歪 * @version 1.0 * @date 2020/12/11 10:24 */public class NumberDemo { /** * 通過拋出異常判斷是否是數(shù)字 * @param str * @return */ private static boolean isNumber(String str) { // 這個(gè)代碼意思是如果沒有拋出異常 就證明是數(shù)字,拋出異常了那么就不是數(shù)字 // 異常不適合做邏輯判斷,不適合做業(yè)務(wù)邏輯,異常使用不合理,不符合代碼規(guī)范 try { // parseInt 是將字符串轉(zhuǎn)換為整數(shù)類型,返回一個(gè)int類型,如果字符串中有非數(shù)字類型字符,則會(huì)拋出一個(gè)NumberFormatException的異常 Integer.parseInt(str); return true; } catch (NumberFormatException e) { e.printStackTrace(); return false; } }}
四,使用正則表達(dá)式;(推薦)
java可以通過正則表達(dá)式判斷字符串是否為數(shù)字,實(shí)例代碼如下:
\d+ :使用正則表達(dá)式判斷該字符串是否為數(shù)字。
第一個(gè)是轉(zhuǎn)義符;
d+表示匹配1個(gè)或多個(gè)連續(xù)數(shù)字。"+"和"*"類似,"*"表示0個(gè)或多個(gè)。
擴(kuò)展:
?:0或1個(gè),;
*:0或多個(gè);
+:1或多個(gè) 。
- str.matches("\d+");
- 通過 -?[0-9]+(\\.[0-9]+)? ,進(jìn)行匹配是否為數(shù)字;
- Pattern pattern = Pattern.compile("[0-9]*");
- “-?[0-9]+.?[0-9]+”,即可匹配所有數(shù)字。
- Pattern.compile("^[-\+]?[\d]*$");
- str.matches("-?[0-9]+.?[0-9]*"); (比較全面,推薦)
代碼1:
public class NumberDemo { // 根據(jù)阿里巴巴代碼規(guī)范,將Pattern設(shè)置為全局常量 // 通過 -?[0-9]+(\\.[0-9]+)? 進(jìn)行匹配是否為數(shù)字 private static Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?"); /** * 通過正則表達(dá)式判斷字符串是否為數(shù)字 * @param str * @return */ private static boolean isNumber(String str) { // 通過Matcher進(jìn)行字符串匹配 Matcher m = pattern.matcher(str); // 如果正則匹配通過 m.matches() 方法返回 true ,反之 false return m.matches(); }}
代碼2:(推薦,速度最快)
public static boolean isInteger(String str) { Pattern pattern = Pattern.compile("^[-\+]?[\d]*$"); return pattern.matcher(str).matches(); }
代碼3:
public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); return pattern.matcher(str).matches(); }
代碼4:采用正則表達(dá)式的方式來判斷一個(gè)字符串是否為數(shù)字,這種方式判斷面比較全面,可以判斷正負(fù)、整數(shù)小數(shù) (推薦)
//?:0或1個(gè), *:0或多個(gè), +:1或多個(gè) Boolean strResult = str.matches("-?[0-9]+.?[0-9]*"); if(strResult == true) { System.out.println("Is Number!"); }else { System.out.println("Is not Number!"); }






