【mvc框架 源码】【kcf源码解读】【自制舵机源码】stringutils 源码

2024-11-26 15:28:18 来源:Linux编辑源码 分类:焦点

1.StringUtils中isEmpty 和isBlank的区别
2.Java必修课判断String是否包含子串的四种方法及性能对比
3.isempty和isblank的用法区别,你都知道吗?
4.StringUtils在commons-lang3和commons-lang中的区别

stringutils 源码

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)方法,mvc框架 源码返回子串subStr第一次出现的位置,如果不存在则返回-1。例子如下:

       最直观判断的方法是contains(subStr),返回类型为boolean,如果包含返回true,不包含则返回false。例子如下:

       实际上,String的contains方法是通过调用indexOf方法来判断的,源码如下:

       通过强大的正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下:

       Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下:

       我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下:

       测试代码如下:

       测试结果如下:

       最快的kcf源码解读就是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方法相对慢,正则匹配方法最慢。在使用方法时,注意处理空值问题。希望本文能帮助你更好地理解和使用这些方法。

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中的区别

本文地址:http://0553.net.cn/news/1c94599053.html 欢迎转发