java判斷字串是否為數字的幾種常見方式
阿新 • • 發佈:2020-12-11
第一種:通過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;
}
}
}
作者:歪歪
一個職場老菜鳥,夢想成為一名有頭髮的程式設計大牛。