1.isempty和isblank的方法源y方法用法区别,你都知道吗?
2.StringUtilsä¸isEmpty åisBlankçåºå«
3.常用的 list.isEmpty() 为何突然报null?
isempty和isblank的用法区别,你都知道吗?
在编程中,我们经常会遇到需要判断字符串是方法源y方法否为空的情况。这时候,方法源y方法我们通常会用到工具类StringUtils中的方法源y方法isEmpty和isBlank方法。这两个方法都用于判断字符串是方法源y方法否为空,但它们的方法源y方法剑舞情缘源码判断标准有所区别。
isEmpty方法用于判断字符串是方法源y方法否为空字符串。只要字符串中包含任何字符,方法源y方法无论该字符是方法源y方法否为空白字符,isEmpty方法都会判断字符串不为空。方法源y方法它的方法源y方法方法源码只判断了字符串是否为null或者长度为0。这意味着,方法源y方法如果用户输入" "等空白字符,方法源y方法isEmpty方法会返回false,方法源y方法即判断为不为空。方法源y方法
而isBlank方法则用于判断字符串是否为空字符串,但其判断标准更加严格。netfilter源码详解isBlank方法会判断字符串中的所有字符是否都是空白字符。如果字符串中存在任何非空白字符,isBlank方法就会返回false。它的方法源码在第7行有一处关键判断,只要字符串中有一个字符不是空白字符,就会返回false。这意味着,如果用户输入" "等空白字符,nlayerapp 源码下载isBlank方法会正确地返回true,即判断为空。
通过上述的解释,我们可以看出isEmpty和isBlank方法在判断字符串是否为空时有着不同的标准。在实际编程中,我们需要根据具体场景的需求来选择使用哪个方法。例如,在一些业务场景下,openfire 源码 发布我们可能希望判断字符串是否为空白字符,此时isBlank方法会更加合适。而在其他场景下,我们可能只需要判断字符串是否为空字符串,此时isEmpty方法则更为适用。
StringUtilsä¸isEmpty åisBlankçåºå«
ããStringUtilså¨commons-lang-2.2.jarå ä¸ï¼org.apache.commons.lang.StringUtils ;
ãã
ããStringUtilsæ¹æ³çæä½å¯¹è±¡æ¯java.lang.Stringç±»åç对象ï¼æ¯JDKæä¾çStringç±»åæä½æ¹æ³çè¡¥å ï¼å¹¶ä¸æ¯nullå®å ¨ç(å³å¦æè¾å ¥åæ°String为nullåä¸ä¼æåºNullPointerExceptionï¼èæ¯åäºç¸åºå¤çï¼ä¾å¦ï¼å¦æè¾å ¥ä¸ºnullåè¿åä¹æ¯nullçï¼å ·ä½å¯ä»¥æ¥çæºä»£ç )ã
ãã
ããé¤äºæé å¨ï¼StringUtilsä¸ä¸å ±æå¤ä¸ªæ¹æ³ï¼å¹¶ä¸é½æ¯staticçï¼æ以æ们å¯ä»¥è¿æ ·è°ç¨StringUtils.xxx()
ãã1. public static boolean isEmpty(String str)
ããå¤ææå符串æ¯å¦ä¸ºç©ºï¼ä¸ºç©ºçæ åæ¯str==nullæstr.length()==0
ããä¸é¢æ¯StringUtilså¤ææ¯å¦ä¸ºç©ºç示ä¾ï¼
ããStringUtils.isEmpty(null) = true
ããStringUtils.isEmpty("") = true
ããStringUtils.isEmpty(" ") = false //注æå¨StringUtilsä¸ç©ºæ ¼ä½é空å¤ç
ããStringUtils.isEmpty(" ") = false
ããStringUtils.isEmpty("bob") = false
ããStringUtils.isEmpty(" bob ") = false
ãã2. public static boolean isNotEmpty(String str)
ããå¤ææå符串æ¯å¦é空ï¼çäº!isEmpty(String str)
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.isNotEmpty(null) = false
ããStringUtils.isNotEmpty("") = false
ããStringUtils.isNotEmpty(" ") = true
ããStringUtils.isNotEmpty(" ") = true
ããStringUtils.isNotEmpty("bob") = true
ããStringUtils.isNotEmpty(" bob ") = true
ãã3. public static boolean isBlank(String str)
ããå¤ææå符串æ¯å¦ä¸ºç©ºæé¿åº¦ä¸º0æç±ç©ºç½ç¬¦(whitespace)ææ
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.isBlank(null) = true
ããStringUtils.isBlank("") = true
ããStringUtils.isBlank(" ") = true
ããStringUtils.isBlank(" ") = true
ããStringUtils.isBlank("\t \n \f \r") = true //对äºå¶è¡¨ç¬¦ãæ¢è¡ç¬¦ãæ¢é¡µç¬¦åå车符StringUtils.isBlank()åè¯ä¸ºç©ºç½ç¬¦
ããStringUtils.isBlank("\b") = false //"\b"为åè¯è¾¹ç符
ããStringUtils.isBlank("bob") = false
ããStringUtils.isBlank(" bob ") = false
ãã4. public static boolean isNotBlank(String str)
ããå¤ææå符串æ¯å¦ä¸ä¸ºç©ºä¸é¿åº¦ä¸ä¸º0ä¸ä¸ç±ç©ºç½ç¬¦(whitespace)ææï¼çäº!isBlank(String str)
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.isNotBlank(null) = false
ããStringUtils.isNotBlank("") = false
ããStringUtils.isNotBlank(" ") = false
ããStringUtils.isNotBlank(" ") = false
ããStringUtils.isNotBlank("\t \n \f \r") = false
ããStringUtils.isNotBlank("\b") = true
ããStringUtils.isNotBlank("bob") = true
ããStringUtils.isNotBlank(" bob ") = true
ããå ¶ä»æ¹æ³ä»ç»ï¼
ãã5. public static String trim(String str)
ããå»æå符串两端çæ§å¶ç¬¦(control characters, char <= ),å¦æè¾å ¥ä¸ºnullåè¿ånull
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.trim(null) = null
ããStringUtils.trim("") = ""
ããStringUtils.trim(" ") = ""
ããStringUtils.trim(" \b \t \n \f \r ") = ""
ããStringUtils.trim(" \n\tss \b") = "ss"
ããStringUtils.trim(" d d dd ") = "d d dd"
ããStringUtils.trim("dd ") = "dd"
ããStringUtils.trim(" dd ") = "dd"
ãã6. public static String trimToNull(String str)
ããå»æå符串两端çæ§å¶ç¬¦(control characters, char <= ),å¦æå为nullæ""ï¼åè¿ånull
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.trimToNull(null) = null
ããStringUtils.trimToNull("") = null
ããStringUtils.trimToNull(" ") = null
ããStringUtils.trimToNull(" \b \t \n \f \r ") = null
ããStringUtils.trimToNull(" \n\tss \b") = "ss"
ããStringUtils.trimToNull(" d d dd ") = "d d dd"
ããStringUtils.trimToNull("dd ") = "dd"
ããStringUtils.trimToNull(" dd ") = "dd"
ãã7. public static String trimToEmpty(String str)
ããå»æå符串两端çæ§å¶ç¬¦(control characters, char <= ),å¦æå为nullæ""ï¼åè¿å""
ããä¸é¢æ¯ç¤ºä¾ï¼
ããStringUtils.trimToEmpty(null) = ""
ããStringUtils.trimToEmpty("") = ""
ããStringUtils.trimToEmpty(" ") = ""
ããStringUtils.trimToEmpty(" \b \t \n \f \r ") = ""
ããStringUtils.trimToEmpty(" \n\tss \b") = "ss"
ããStringUtils.trimToEmpty(" d d dd ") = "d d dd"
ããStringUtils.trimToEmpty("dd ") = "dd"
ããStringUtils.trimToEmpty(" dd ") = "dd"
ãã8. public static String strip(String str)
ããå»æå符串两端ç空ç½ç¬¦(whitespace)ï¼å¦æè¾å ¥ä¸ºnullåè¿ånull
ããä¸é¢æ¯ç¤ºä¾(注æåtrim()çåºå«)ï¼
ããStringUtils.strip(null) = null
ããStringUtils.strip("") = ""
ããStringUtils.strip(" ") = ""
ããStringUtils.strip(" \b \t \n \f \r ") = "\b"
ããStringUtils.strip(" \n\tss \b") = "ss \b"
ããStringUtils.strip(" d d dd ") = "d d dd"
ããStringUtils.strip("dd ") = "dd"
ããStringUtils.strip(" dd ") = "dd"
ãã9. public static String stripToNull(String str)
ããå»æå符串两端ç空ç½ç¬¦(whitespace)ï¼å¦æå为nullæ""ï¼åè¿ånull
ããä¸é¢æ¯ç¤ºä¾(注æåtrimToNull()çåºå«)ï¼
ããStringUtils.stripToNull(null) = null
ããStringUtils.stripToNull("") = null
ããStringUtils.stripToNull(" ") = null
ããStringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
ããStringUtils.stripToNull(" \n\tss \b") = "ss \b"
ããStringUtils.stripToNull(" d d dd ") = "d d dd"
ããStringUtils.stripToNull("dd ") = "dd"
ããStringUtils.stripToNull(" dd ") = "dd"
ãã. public static String stripToEmpty(String str)
ããå»æå符串两端ç空ç½ç¬¦(whitespace)ï¼å¦æå为nullæ""ï¼åè¿å""
ããä¸é¢æ¯ç¤ºä¾(注æåtrimToEmpty()çåºå«)ï¼
ããStringUtils.stripToNull(null) = ""
ããStringUtils.stripToNull("") = ""
ããStringUtils.stripToNull(" ") = ""
ããStringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
ããStringUtils.stripToNull(" \n\tss \b") = "ss \b"
ããStringUtils.stripToNull(" d d dd ") = "d d dd"
ããStringUtils.stripToNull("dd ") = "dd"
ããStringUtils.stripToNull(" dd ") = "dd"
常用的 list.isEmpty() 为何突然报null?
发现项目中常用方法突然报null,今天就来详细探讨下原因。
以往使用list集合判断是hashmap put源码否为空时,通常会通过list.isEmpty()方法来判断返回值是否为true,以此继续执行业务流程。然而,近期这个方法突然报出null错误,这是怎么回事呢?
业务场景模拟:
创建一个父类,并在其中定义子类的list,main方法中给父类id赋值,但list未赋值。之后,尝试使用father.getSonList()方法时,遇到了空异常问题。而使用CollectionUtils进行判断时,则未出现此错误。
下面看一段代码示例:
原因分析:
深入探究源码后发现,CollectionUtils里确实也包含了isEmpty的判断。那么,为何它没有报出错误呢?
其实,我们知道&&和||都是短路操作符。&&要求两个条件都为真时,才会返回真值,一旦第一个条件为假,则后续条件不再执行,直接返回假值。而||只要第一个条件为真,就不再执行后续条件,直接返回真值。
因此,问题原因在于:CollectionUtils在先判断是否为null的同时,使用了短路模式,并通过||操作符确保了即使list为空,也能够提前返回真值,避免了空异常的发生。这样一来,业务流程得以正常进行,避免了null错误的产生。