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