第一種:通過StringUilts工具包進行判斷
org.apache.commons.lang3.StringUtils
提供了豐富的字符串解析的工具包,其中isNumeric(String Str)
就是提供解析是否為數字類型的方法,具體如何操作,請看下面案例:
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,從而有一些字符這個方法是不可以識別的,也就是無法解析,我們來看看官方案例:
StringUtils.isNumeric(null) = false
StringUtils.isNumeric("") = false
StringUtils.isNumeric(" ") = false
StringUtils.isNumeric("123") = true
StringUtils.isNumeric("१२३") = true
StringUtils.isNumeric("12 3") = false
StringUtils.isNumeric("ab2c") = false
StringUtils.isNumeric("12-3") = false
StringUtils.isNumeric("12.3") = false
StringUtils.isNumeric("-123") = false
StringUtils.isNumeric("+123") = false
第二種:通過正則表達式進行判斷
java可以通過正則表達式判斷字符串是否為數字,實例代碼如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 歪歪
* @version 1.0
* @date 2020/12/11 10:24
*/
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();
}
}
第三種:通過拋出異常進行判斷
通過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;
}
}
}
作者:歪歪
一個職場老菜鳥,夢想成為一名有頭發的編程大牛。