欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java判空的一些常見(jiàn)方法

 更新時(shí)間:2023年07月11日 16:21:53   作者:白白白鯉魚(yú)  
這篇文章主要給大家分享介紹了Java判空的一些常見(jiàn)方法,在程序中必須進(jìn)行嚴(yán)格的判空處理,避免對(duì)空對(duì)象的異常操作,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、 對(duì)象判空

if (obj != null) {
    // 進(jìn)行對(duì)象非空判斷
}
 
Object obj = null; // 或者 obj = new Object();
if (obj == null) {
    // 對(duì)象為空
}

另外,Guava 庫(kù)還提供了一個(gè)更方便的方法,使用方式如下:

import com.google.common.base.Objects;
 
if (Objects.isNull(obj)) {
    // 對(duì)象為空
}

二、 字符串判空

List<String> list = new ArrayList<>();
if (list == null || list.size() == 0) {
    // list 為空
}

簡(jiǎn)單,但需要寫(xiě)太多代碼判斷,會(huì)顯得有些麻煩。或 使用 Apache Commons Lang3 提供的 判斷字符串是否為空或者只包含空格字符。這種方式使用起來(lái)非常方便:

import org.apache.commons.lang3.StringUtils;
 
if (StringUtils.isBlank(str)) {
    // 字符串為空
}

還可采用  Java 8 引入的 String#isEmpty() 方法判斷字符串是否為空字符串:

if (str == null || str.isEmpty()) {
    // 字符串為空
}

還有 Java 11 引入的 String#isBlank() 方法判斷字符串是否為空或者只包含空格字符:

if (str == null || str.isBlank()) {
    // 字符串為空
}

 若還要 判斷字符串是否為空或null:

String str = null; // 或者 str = "";
if (str == null || str.length() == 0 || str.trim().length() == 0) {
    // 字符串為空或null
}

也可以使用 Apache Commons Lang3 庫(kù)中的 StringUtils 工具類(lèi)中的 isBlank() 方法進(jìn)行判斷:

import org.apache.commons.lang3.StringUtils;
if (StringUtils.isBlank(str)) {
    // 字符串為空或null或只包含空白字符
}
直接使用 == 判斷是否為 null,或使用 equals() 判斷是否等于空字符串 "":
String str = null;
if (str == null || str.equals("")) {
    // 字符串為空
}
使用 isEmpty() 方法判斷字符串是否為空字符串 "":
String str = "";
if (str.isEmpty()) {
    // 字符串為空
}
使用 isBlank() 方法判斷字符串是否為空或全是空格:
String str = "   ";
if (StringUtils.isBlank(str)) {
    // 字符串為空或全是空格
}
使用正則表達(dá)式判斷字符串是否為空或只包含空格:
String str = "    ";
if (str.matches("\\s*")) {
    // 字符串為空或只包含空格
}
需要注意的是,第三種方法需要導(dǎo)入 StringUtils 類(lèi),而第四種方法雖然不需要導(dǎo)入任何類(lèi),但比較麻煩,建議使用前三種方法中的一種。

三、 List 判空

使用 if (list == null || list.isEmpty()) 判斷 List 是否為 null 或者是否為空列表?;蚴褂?Java 8 引入的 isEmpty() 方法判斷 List 是否為 null 或者是否為空列表:但注意 isEmpty() 方法只會(huì)判斷集合是否為空,而不會(huì)判斷集合是否為 null。因此,使用 Collection#isEmpty() 方法之前,要先判斷集合是否為 null。如果為 null,則該方法會(huì)拋出空指針異常。正確的使用方法如下:

List<Object> list = ...;
if (list != null && !list.isEmpty()) { // 先判斷 list 是否為 null,再判斷 list 是否為空
    // 進(jìn)行操作
}
 
if (list == null || list.isEmpty()) {
    // List 為空
}
 

上述代碼中,先使用 list!=null 來(lái)判斷 list 是否為 null,如果是,則不會(huì)進(jìn)入條件語(yǔ)句中。如果不是,則使用 !list.isEmpty() 來(lái)判斷 list 是否為空,如果不為空,則進(jìn)入條件語(yǔ)句中進(jìn)行操作。

四、Map 判空

Map<String, String> map = null; // 或者 map = new HashMap<>();
if (map == null || map.isEmpty()) {
    // Map為空或null
}
private void putInfoToMap(Map<String,String> map ,String key ,String value){          
    if(StringUtils.isEmpty(key)){
            return;
    }
    if(StringUtils.isEmpty(value)){
            map.put(key, " ");
    }else{
            map.put(key, value);
       }
    }

五、數(shù)組判空

String[] array = null; // 或者 array = new String[10];
if (array == null || array.length == 0) {
    // 數(shù)組為空或null
}
 

六、Set判空

Set<String> set = null; // 或者 set = new HashSet<>();
if (set == null || set.isEmpty()) {
    // Set為空或null
}

在判斷集合、數(shù)組、對(duì)象是否為空時(shí),進(jìn)行非空判斷時(shí)最好先判斷對(duì)象是否存在,否則在對(duì)象不存在的情況下操作對(duì)象可能會(huì)導(dǎo)致空指針異常的發(fā)生。

七、文件判空

    public SalaryExcelOperatVo uploadExcel(MultipartFile multipartFile) {
        if (multipartFile==null) {
            log.error("文件不能為空");
             throw new RuntimeException("上傳Excel文件內(nèi)容為空,請(qǐng)重新上傳!");
        }
        String fileName = multipartFile.getOriginalFilename();
        //判斷文件是否是excel文件
        assert fileName != null;
        if (!fileName.endsWith("xls") && !fileName.endsWith("xlsx")) {
            log.error(fileName + "不是Excel文件!");
            throw new RuntimeException(fileName + "不是Excel文件!");
        }
        //保存文件到本地
        File dir1 = new File("/roots/uploadFile/xzExcel");
        if (!dir1.exists()) {
            dir1.mkdirs();
        }
        //統(tǒng)一日期格式
        LocalDateTime current = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formatted = current.format(formatter);
        //加上三位隨機(jī)數(shù)
        Random random = new Random();
        int end3 = random.nextInt(999);
        File file1 = new File(dir1.getAbsolutePath() + File.separator + formatted + "-" + end3 + "-" + multipartFile.getOriginalFilename());
        try {
            multipartFile.transferTo(file1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("【上傳薪資Excel文件已保存到本地:{}】",file1.getAbsolutePath());
        //創(chuàng)建返回對(duì)象SalaryExcelOperatVo的實(shí)例化對(duì)象: result
        SalaryExcelOperatVo result = new SalaryExcelOperatVo();
        //獲取excel文件sheet1 的內(nèi)容
        ArrayList<InSalary> inSalaries1 = readExcel1(file1.getAbsolutePath());
        ArrayList<SalaryStaffPerOneListVo> vo1 = new ArrayList<>();
        SalaryStaffPerOneListVo oneListVo ;
        for(InSalary inSalary1:inSalaries1){
            oneListVo = new SalaryStaffPerOneListVo();
            BeanUtils.copyProperties(inSalary1,oneListVo);
            vo1.add(oneListVo);
}
        result.setSheetOne(vo1);
        //獲取excel文件sheet2 的內(nèi)容
        ArrayList<InSalary> inSalaries2 = readExcel2(file1.getAbsolutePath());
        ArrayList<SalaryStaffPerTwoListVo> vo2 = new ArrayList<>();
        SalaryStaffPerTwoListVo twoListVo ;
        for(InSalary inSalary2:inSalaries2){
            twoListVo = new SalaryStaffPerTwoListVo();
            BeanUtils.copyProperties(inSalary2,twoListVo);
            vo2.add(twoListVo);
        }
        result.setSheetTwo(vo2);
        return result;
    }

八、StringUtils 工具類(lèi)

        StringUtils 提供了許多字符串操作相關(guān)的方法,其中比較常用的包括 isEmpty、isNotEmpty、isBlank 和 isNotBlank,它們的作用如下:

  • isEmpty:判斷字符串是否為 null 或長(zhǎng)度是否為 0;
  • isNotEmpty:判斷字符串是否不為 null 且長(zhǎng)度不為 0;
  • isBlank:判斷字符串是否為 null、空字符串或全為空格字符;
  • isNotBlank:判斷字符串是否不為 null、不為空字符串且不全為空格字符。

isEmpty 和 isNotEmpty 是根據(jù)字符串的長(zhǎng)度來(lái)判斷的,而 isBlank 和 isNotBlank 還包括對(duì)空格字符的處理。另外,如果字符串為 null,無(wú)論使用哪個(gè)方法都會(huì)返回 true。

以下是 StringUtils.isEmpty、StringUtils.isNotEmpty、StringUtils.isBlank 和 StringUtils.isNotBlank 的源碼實(shí)現(xiàn)(相對(duì)簡(jiǎn)化),可以更好地理解它們的區(qū)別:

public class StringUtils {
    // 判斷字符串是否為空(長(zhǎng)度是否為 0)
    public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }
    // 判斷字符串是否不為空(長(zhǎng)度是否不為 0)
    public static boolean isNotEmpty(CharSequence cs) {
        return !isEmpty(cs);
    }
    // 判斷字符串是否為空白(包括 null、空字符串和全為空格字符)
    public static boolean isBlank(CharSequence cs) {
        int length;
        if (cs == null || (length = cs.length()) == 0) {
            return true;
        }
        for (int i = 0; i < length; i++) {
            if (!Character.isWhitespace(cs.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    // 判斷字符串是否不為空白(不包括 null、空字符串和全為空格字符)
    public static boolean isNotBlank(CharSequence cs) {
        return !isBlank(cs);
    }
}
private void validChoiceInfo(InSalary data, AnalysisContext context) {
    if(isBlank(data.getUserName())){
        throw new ExcelAnalysisException(String.format("上傳失敗:第%s行員工姓名為空",context.readRowHolder().getRowIndex()));
    }
    if(isBlank(data.getIdNumber())){
        throw new ExcelAnalysisException(String.format("上傳失敗:第%s行員工身份證信息為空",context.readRowHolder().getRowIndex()));
    }
}  
private void validChoiceInfo(InSalary data, AnalysisContext context) {
if(StrUtil.isBlank(data.getUserName())){
    throw new ExcelAnalysisException(String.format("上傳失敗:第%s行員工姓名為空",context.readRowHolder().getRowIndex()));
}
if(StrUtil.isBlank(data.getIdNumber())){
    throw new ExcelAnalysisException(String.format("上傳失敗:第%s行員工身份證信息為空",context.readRowHolder().getRowIndex()));
}
} 

        這兩段代碼實(shí)現(xiàn)的功能是一樣的,都是對(duì)員工姓名和身份證信息進(jìn)行非空判斷,并在為空的情況下拋出異常。不同之處在于第一段代碼使用了 isBlank() 方法,而第二段則使用了 StrUtil.isBlank() 方法。isBlank() 方法是在 JDK 11 中新增的,能夠判斷字符串是否為空或全為空格,因此不需要再使用 trim() 方法進(jìn)行判斷。而 StrUtil.isBlank() 方法是在 Hutool 庫(kù)中提供的,功能與 isBlank() 類(lèi)似,但需要將 Hutool 庫(kù)引入項(xiàng)目中才能使用。另外,兩段代碼還有一個(gè)細(xì)微的差別。第一段代碼使用了 if(isBlank(data.getUserName())) 的形式進(jìn)行判斷,而第二段代碼使用了 if(StrUtil.isBlank(data.getUserName())) 的形式。這兩種寫(xiě)法的效果是一樣的,只是調(diào)用方法的方式略有不同。

總結(jié)

到此這篇關(guān)于Java判空的一些常見(jiàn)方法的文章就介紹到這了,更多相關(guān)Java判空方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中@Conditional注解的介紹及實(shí)踐

    SpringBoot中@Conditional注解的介紹及實(shí)踐

    在 Spring Boot 中,@Conditional 注解用于實(shí)現(xiàn) 條件化 Bean 裝配,本文將詳細(xì)介紹 @Conditional 相關(guān)的注解,并結(jié)合實(shí)際應(yīng)用示例講解其使用方式,感興趣的小伙伴可以了解下
    2025-03-03
  • Java多線程環(huán)境下使用的集合類(lèi)示例詳解

    Java多線程環(huán)境下使用的集合類(lèi)示例詳解

    這篇文章主要給大家介紹了關(guān)于Java多線程環(huán)境下使用的集合類(lèi)的相關(guān)資料,開(kāi)發(fā)過(guò)程中經(jīng)常遇到這種需求,文中通過(guò)代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    今天小編就為大家分享一篇關(guān)于Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • IDEA 2020 無(wú)法啟動(dòng)的解決辦法(啟動(dòng)崩盤(pán))附IDEA 2020 新功能

    IDEA 2020 無(wú)法啟動(dòng)的解決辦法(啟動(dòng)崩盤(pán))附IDEA 2020 新功能

    這篇文章主要介紹了IDEA 2020 無(wú)法啟動(dòng)的解決辦法(啟動(dòng)崩盤(pán))附IDEA 2020 新功能,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解java配置文件的路徑問(wèn)題

    詳解java配置文件的路徑問(wèn)題

    這篇文章主要介紹了詳解java配置文件的路徑問(wèn)題的相關(guān)資料,這里對(duì)絕對(duì)路徑及相對(duì)路徑和classpath 類(lèi)文件路徑進(jìn)行詳細(xì)介紹,需要的朋友可以參考下
    2017-07-07
  • Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)

    Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)

    FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng),對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件上傳、文件下載等,解決了大容量存儲(chǔ)和負(fù)載均衡的問(wèn)題。本文將提供Java將文件上傳至FastDFS的示例代碼,需要的參考一下
    2022-02-02
  • SpringBoot實(shí)現(xiàn)Read Through模式的操作過(guò)程

    SpringBoot實(shí)現(xiàn)Read Through模式的操作過(guò)程

    Read Through模式通常是指一種緩存策略,其中當(dāng)應(yīng)用程序嘗試讀取數(shù)據(jù)時(shí),緩存系統(tǒng)首先被檢查以查看數(shù)據(jù)是否已經(jīng)存在于緩存中,這篇文章主要介紹了SpringBoot實(shí)現(xiàn)Read Through模式,需要的朋友可以參考下
    2024-07-07
  • 詳解Java分布式系統(tǒng)中session一致性問(wèn)題

    詳解Java分布式系統(tǒng)中session一致性問(wèn)題

    這篇文章主要介紹了Java分布式系統(tǒng)中session一致性問(wèn)題,對(duì)分布式系統(tǒng)感興趣的同學(xué),要仔細(xì)看一下
    2021-04-04
  • Mybatis批量提交實(shí)現(xiàn)步驟詳解

    Mybatis批量提交實(shí)現(xiàn)步驟詳解

    這篇文章主要介紹了Mybatis批量提交實(shí)現(xiàn)步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中的雙重檢查(Double-Check)詳解

    Java中的雙重檢查(Double-Check)詳解

    這篇文章主要為大家詳細(xì)介紹了Java中的雙重檢查(Double-Check),感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論