1.StringUtilsä¸isEmpty åisBlankçåºå«
2.Java必修课判断String是否包含子串的四种方法及性能对比
3.isempty和isblank的用法区别,你都知道吗?
4.StringUtilså¨commons-lang3åcommons-langä¸çåºå«
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"
Java必修课判断String是否包含子串的四种方法及性能对比
判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是否有ERROR信息等。本文将介绍四种方法并进行性能测试。 在String的函数中,提供了indexOf(subStr)方法,压枪源码软件返回子串subStr第一次出现的位置,如果不存在则返回-1。例子如下: 最直观判断的方法是contains(subStr),返回类型为boolean,如果包含返回true,不包含则返回false。例子如下: 实际上,String的contains方法是通过调用indexOf方法来判断的,源码如下: 通过强大的正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下: Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下: 我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下: 测试代码如下: 测试结果如下: 最快的gom 插件源码就是indexOf方法,其次是contains方法,二者应该没有实际区别,contains是调用indexOf来实现的。Apache的StringUtils为第三方库,相对慢一些。最慢的是使用了正则的Pattern的方法,这不难理解,正则引擎的匹配是比较耗性能的。 本文介绍了判断一个字符串是否包含某个特定子串的四种方法,并通过性能测试进行了对比。骏马灯源码其中性能最好的是String的indexOf方法和contains方法,建议使用contains方法,性能好,跟indexOf相比,更直观,更不容易犯错。毕竟让每个人时刻记住返回-1代表不存在也不是一件容易的事。 但是,使用indexOf和contains方法都需要注意做判空处理,这时StringUtils的ps修改源码优势就体现出来了。 总结,四种方法如下:indexOf(subStr):返回子串第一次出现的位置,不存在返回-1。
contains(subStr):返回true或false,是否包含。
Pattern匹配:使用正则匹配,相对耗性能。
StringUtils.contains:Apache库提供,相对慢。
性能测试结果显示,springjdk的源码indexOf和contains方法最佳,建议使用contains方法。Apache库的StringUtils方法相对慢,正则匹配方法最慢。在使用方法时,注意处理空值问题。希望本文能帮助你更好地理解和使用这些方法。isempty和isblank的用法区别,你都知道吗?
在编程中,我们经常会遇到需要判断字符串是否为空的情况。这时候,我们通常会用到工具类StringUtils中的isEmpty和isBlank方法。这两个方法都用于判断字符串是否为空,但它们的判断标准有所区别。
isEmpty方法用于判断字符串是否为空字符串。只要字符串中包含任何字符,无论该字符是否为空白字符,isEmpty方法都会判断字符串不为空。它的方法源码只判断了字符串是否为null或者长度为0。这意味着,如果用户输入" "等空白字符,isEmpty方法会返回false,即判断为不为空。
而isBlank方法则用于判断字符串是否为空字符串,但其判断标准更加严格。isBlank方法会判断字符串中的所有字符是否都是空白字符。如果字符串中存在任何非空白字符,isBlank方法就会返回false。它的方法源码在第7行有一处关键判断,只要字符串中有一个字符不是空白字符,就会返回false。这意味着,如果用户输入" "等空白字符,isBlank方法会正确地返回true,即判断为空。
通过上述的解释,我们可以看出isEmpty和isBlank方法在判断字符串是否为空时有着不同的标准。在实际编程中,我们需要根据具体场景的需求来选择使用哪个方法。例如,在一些业务场景下,我们可能希望判断字符串是否为空白字符,此时isBlank方法会更加合适。而在其他场景下,我们可能只需要判断字符串是否为空字符串,此时isEmpty方法则更为适用。
StringUtilså¨commons-lang3åcommons-langä¸çåºå«
ï¼1ï¼å ¥åç±»åä¸åcommons.langä¸å ¥å为 Sring str
commons.lang3ä¸å ¥å为 CharSequence cs(éç¨èå´æ´å¹¿)
ï¼2ï¼å ¥åæ°éä¸å
commons.lang3ä¸æ¯æå¤å ¥å
æè¿ç»å¸¸éè¦å¯¹Stringåä¸äºå¤æåå¤çï¼äºæ¯å°±ç¨å°äºApacheæä¾çStringUtilsè¿ä¸ªå·¥å ·ç±»ï¼ç¨çæ¶ååç°æ两个ä¸åççæ¬ï¼ä¸ä¸ªçæ¬ä½äºorg.apache.commons.langä¸é¢ï¼å¦ä¸ä¸ªåä½äºorg.apache.commons.lang3ä¸é¢ã
æ¥äºä¸ä¸èµæï¼lang3æ¯Apache Commons å¢éåå¸çå·¥å ·å ï¼è¦æ±jdkçæ¬å¨1.5以ä¸ï¼ç¸å¯¹äºlangæ¥è¯´å®å ¨æ¯æjava5çç¹æ§ï¼åºé¤äºä¸äºæ§çAPIã该çæ¬æ æ³å ¼å®¹æ§æçæ¬ï¼äºæ¯ä¸ºäºé¿å å²çªæ¹å为lang3ãè¿äºä¸è¥¿å°±ä¸åç»è¯´äºï¼æ们æ¥ççStringUtilsä¸å¸¸ç¨çä¸äºæ¹æ³æä»ä¹æ¹åå§ã
å¯ä»¥çå°è¿å 个æ¹æ³é»è¾æ¯«æ ååï¼åªæ¯åæ°ç±»ååäºï¼ç±Stringå为CharSequenceãé£ä¹è¿ä¸ªCharSequenceæ¯ä»ä¹å¢ï¼æ们ççå®çæºç ï¼
CharSequenceæ¯ä¸ä¸ªå符åºåçæ¥å£ï¼å ¶ä¸å®ä¹äºä¸äºå¸¸ç¨çå¦length()ãsubSequence()çæ¹æ³ï¼Stringä¹å®ç°äºè¿ä¸ªæ¥å£ãå½ç¶å¤§å®¶å¯è½å¨Stringéç¨å°çé½æ¯subString()ï¼å®é ä¸Stringä¹å®ç°äºsubSequence()è¿ä¸ªæ¹æ³ï¼åªæ¯ç´æ¥æåäºsubString()ã
lang3ä¸ä½¿ç¨CharSequenceæ大ç好å¤å°±æ¯ä»¤è¿äºæ¹æ³ç¨å¤æ´å 广æ³ï¼ä¸æ¢å±éäºStringï¼å ¶ä»ä¸äºå®ç°äºè¯¥æ¥å£çç±»ä¹å¯ä»¥ä½¿ç¨StringUtilsä¸çè¿äºæ¹æ³å»è¿è¡ä¸äºæä½ãå¦å¤æåç°å¾å¤nioä¸çç±»é½å®ç°äºè¿ä¸ªæ¥å£ï¼ä¸ªäººçæµå¯è½ä¹æ为nioæå¡çç®çã
å¨langä¸ï¼ç¬¬ä¸æ¥æ¯å å¤æstr1æ¯å¦ä¸ºç©ºï¼èå¨lang3ä¸ï¼ç¬¬ä¸æ¥åæ¯å å¤æ两个对象æ¯å¦ç¸åãè¿ä¸ªä¸é¾ç解ï¼å¦æ两个对象çå°åç¸åï¼é£ä¹å®ä»¬æåçå°±æ¯åä¸ä¸ªå¯¹è±¡ï¼å 容è¯å®ç¸åã
å¨lang3ä¸ï¼è¿å å ¥äºä¸äºåæ¶å¤æå¤ä¸ªåæ°çæ¹æ³ï¼å¯ä»¥çå°å®é ä¸æ¯å°åæ°å表æ¾å ¥ä¸ä¸ªCharSequenceæ°ç»ä¸ï¼ç¶åéåè°ç¨ä¹åçisEmptyçæ¹æ³ãå¤æblankä¹æ类似çæ¹æ³ã
å¯è½æ人ä¼è§å¾ï¼å¾å¤æ¹æ³Stringæ¬èº«å°±æåï¼ä¸ºä»ä¹è¿è¦ç¨StringUtilsæä¾çå¢ï¼æå¼åæ°ç±»åä¸è°ï¼æ们å¯ä»¥çå°ï¼StringUtilsä¸çæ¹æ³å¤§å¤é½åäºç©ºæ ¡éªï¼å¦æ为空æ¶ä¼è¿åNullæè 空串ï¼èStringæ¬èº«çæ¹æ³å¨å¾å¤ä¼ å ¥åæ°æ对象æ¬èº«ä¸ºç©ºçæ¶åé½ä¼æ¥ç©ºæéé误ã
åèå°åï¼ StringUtilså¨commons-lang3åcommons-langä¸çåºå«