1.StringUtilså¨commons-lang3åcommons-langä¸çåºå«
2.isempty和isblank的联源用法区别,你都知道吗?
3.StringUtilsä¸isEmpty åisBlankçåºå«
4.Java必修课判断String是否包含子串的四种方法及性能对比
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ä¸çåºå«
isempty和isblank的用法区别,你都知道吗?
在编程中,我们经常会遇到需要判断字符串是源码否为空的情况。这时候,联源我们通常会用到工具类StringUtils中的源码isEmpty和isBlank方法。这两个方法都用于判断字符串是联源否为空,但它们的源码矿池平台源码判断标准有所区别。
isEmpty方法用于判断字符串是联源否为空字符串。只要字符串中包含任何字符,源码无论该字符是联源否为空白字符,isEmpty方法都会判断字符串不为空。源码它的联源方法源码只判断了字符串是否为null或者长度为0。这意味着,源码如果用户输入" "等空白字符,联源isEmpty方法会返回false,源码即判断为不为空。联源
而isBlank方法则用于判断字符串是否为空字符串,但其判断标准更加严格。isBlank方法会判断字符串中的所有字符是否都是空白字符。如果字符串中存在任何非空白字符,isBlank方法就会返回false。它的脚本官网源码方法源码在第7行有一处关键判断,只要字符串中有一个字符不是空白字符,就会返回false。这意味着,如果用户输入" "等空白字符,isBlank方法会正确地返回true,即判断为空。
通过上述的解释,我们可以看出isEmpty和isBlank方法在判断字符串是否为空时有着不同的标准。在实际编程中,我们需要根据具体场景的丰南网站制作源码需求来选择使用哪个方法。例如,在一些业务场景下,我们可能希望判断字符串是否为空白字符,此时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"
Java必修课判断String是否包含子串的四种方法及性能对比
判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是电脑软件源码泄露否有ERROR信息等。本文将介绍四种方法并进行性能测试。 在String的函数中,提供了indexOf(subStr)方法,返回子串subStr第一次出现的位置,如果不存在则返回-1。例子如下: 最直观判断的方法是contains(subStr),返回类型为boolean,如果包含返回true,不包含则返回false。例子如下: 实际上,android_sdk 源码String的contains方法是通过调用indexOf方法来判断的,源码如下: 通过强大的正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下: Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下: 我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下: 测试代码如下: 测试结果如下: 最快的就是indexOf方法,其次是contains方法,二者应该没有实际区别,contains是调用indexOf来实现的。Apache的StringUtils为第三方库,相对慢一些。最慢的是使用了正则的Pattern的方法,这不难理解,正则引擎的匹配是比较耗性能的。 本文介绍了判断一个字符串是否包含某个特定子串的四种方法,并通过性能测试进行了对比。其中性能最好的是String的indexOf方法和contains方法,建议使用contains方法,性能好,跟indexOf相比,更直观,更不容易犯错。毕竟让每个人时刻记住返回-1代表不存在也不是一件容易的事。 但是,使用indexOf和contains方法都需要注意做判空处理,这时StringUtils的优势就体现出来了。 总结,四种方法如下:indexOf(subStr):返回子串第一次出现的位置,不存在返回-1。
contains(subStr):返回true或false,是否包含。
Pattern匹配:使用正则匹配,相对耗性能。
StringUtils.contains:Apache库提供,相对慢。
性能测试结果显示,indexOf和contains方法最佳,建议使用contains方法。Apache库的StringUtils方法相对慢,正则匹配方法最慢。在使用方法时,注意处理空值问题。希望本文能帮助你更好地理解和使用这些方法。