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;
        }
    }
}

作者:歪歪

一個職場老菜鳥,夢想成為一名有頭發的編程大牛。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM