1. 程式人生 > 實用技巧 >java判斷字串是否為數字的幾種常見方式

java判斷字串是否為數字的幾種常見方式

第一種:通過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;
        }
    }
}

作者:歪歪

一個職場老菜鳥,夢想成為一名有頭髮的程式設計大牛。