apache的commons工具包是平时使用最多的工具包之一,对其实现方式需要具体了解。commons-lang version 3.1

empty和blank的区别

StringUtils中判断String是否为空的判断方法有4个:

StringUtils.isEmpty(CharSequence cs);
StringUtils.isNotEmpty(CharSequence cs);
StringUtils.isBlank(CharSequence cs);
StringUtils.isNotBlank(CharSequence cs);

        四个方法,从命名可以看出是两对相反的判断函数,empty和blank的主要差别在于对于空白字符的处理上面,empty认为空白字符是一个有效字符,blank认为空白字符不是一个有效字符,空白字符:空格,tab、换行等都为空白字符,讨论这个比较多了,涉及字符集的问题了,现记住不仅仅是空格。对比源码:

/** 字符串不为空即可,不关心字符内容 */
public static boolean isEmpty(CharSequence cs) {
return cs == null || cs.length() == 0;
}
/** 字符串不为空同时,字符不为空白字符,空白字符包含空格、tab、换行等。*/
public static boolean isBlank(CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (Character.isWhitespace(cs.charAt(i)) == false) {
return false;
}
}
return true;
}

        trim(),trimToNull(),trimToEmpty()三个trim方法只是在对trim()结果进行了不同的转义,trimToNull()讲emtpy字符串转换为null,trimToEmpty()讲null转换为empty字符串。

  trim() trimToNull() trimToEmpty()
null null null “”
“” “” null “”
“  “ “” null “”
“abc” “abc” “abc” “abc”
“  abc  “ “abc” “abc” “abc”

        strip(String str,String stripChars)方法,从左右两端移除指定字符,移除规则是:从最左侧开始,取出str中的一个字符chartTmp,当chartTmp是stripChars的字符时,取下一个字符匹配,否则结束匹配;最后将匹配到的字符删除。当stripChars为null时,等同于trim方法。

         stripAll()方法允许批量修改字符串。此外还有一个stripAccent(String input) 方法,作用是移除输入字符串中的java特殊字符。此方法应该和平台有关,源码中的:

StringUtils.stripAccents("&eacute;clair")     = "eclair"
//local java 7 64bit
StringUtils.stripAccents("&eacute;clair") = “&eacute;clair”

StringUtils.containsWhitespace(CharSequence seq) 用来判断目的字符串中是否含有空白字符,关键API为:

Character.isWhitespace(seq.charAt(i)) // 判断一个字符是否为空白字符

StringUtils.indexOfAny(CharSequence cs, char... searchChars) 用于判断目标字符串是否具有任意的searchar,在目标字符串中匹配到最左侧的任意一个待搜索字符,返回其位置。

 

StringUtils.substringBefore(String str, String separator) ,  StringUtils.substringAfter(String str, String separator) 截取分隔符之前、之后的字符串。

未完待续

commons-lang源码解析之StringUtils的更多相关文章

  1. java.lang.Void类源码解析_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerEx ...

  2. spring 源码解析

    1. [文件] spring源码.txt ~ 15B     下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB     下载( ...

  3. 【源码解析】阿里在线诊断工具greys源码

    撸起袖子加油干!开门见山! 一.源码下载 下载代码: git clone https://github.com/oldmanpushcart/greys-anatomy.git 二.源码分析 2.1 ...

  4. t-io 集群解决方案以及源码解析

    t-io 集群解决方案以及源码解析 0x01 概要说明 本博客是基于老谭t-io showcase中的tio-websocket-showcase 示例来实现集群.看showcase 入门还是挺容易的 ...

  5. Spring系列(六):Spring事务源码解析

    一.事务概述 1.1 什么是事务 事务是一组原子性的SQL查询,或者说是一个独立的工作单元.要么全部执行,要么全部不执行. 1.2 事务的特性(ACID) ①原子性(atomicity) 一个事务必须 ...

  6. DataX 3.0 源码解析一

    源码解析 基本调用类分析 任务启动由python脚本新建进程进行任务执行,后续执行由Java进行,以下将对java部分进行分 其中的调用原理机制. Engine 首先入口类为com.alibaba.d ...

  7. Spring源码解析之ConfigurationClassPostProcessor(二)

    上一个章节,笔者向大家介绍了spring是如何来过滤配置类的,下面我们来看看在过滤出配置类后,spring是如何来解析配置类的.首先过滤出来的配置类会存放在configCandidates列表, 在代 ...

  8. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  9. Spring IoC源码解析——Bean的创建和初始化

    Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...

随机推荐

  1. python统计文档中词频

    python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

  2. 摩尔吧 FPGA培训

    摩尔吧  FPGA培训 2017.7.30 第一天与非网摩尔吧创始人苏公雨给我们介绍了FPGA的发展历史,以及目前FPGA厂家的市场定位. 2017.7.30~2017.8.4 这个星期主要是学习画电 ...

  3. UIPanGestureRecognizer 拖动TableView改变其高度

    需求:项目中要求tableView的高度随着手拖动的位置而改变如下图: 关键代码如下: - (void)viewDidLoad{ panGestureRecognizer = [[UIPanGestu ...

  4. 【mongodb分片中mogos启动的报错】

  5. vi模式下的编辑、删除、保存和退出

    vi + 文件名:进入 vi 模式 编辑模式:shift+: 退出编辑模式:Esc 退出编辑模式后可进行光标的上下左右移动(偶尔会出现ABCD,还不知道怎么解决,目前只能出来一个删除一个) 光标处:按 ...

  6. flask第三方插件WTForms

    在django中有ModelForm, 虽然flask原生没有提供, 但是强大的第三方也提供了这样的功能 虽然不如django的强大, 但是基本的功能还是可以有的, 下面就来使用一哈. WTForms ...

  7. CentOS7 LNMP+phpmyadmin环境搭建(一、虚拟机及centos7安装)

    前一阵子配公司的服务器的时候,发现网上好多教程杂乱无章,然后便根据网上已有资料自己整理了一个lnmp环境的安装教程.因为懒,已经好久没写过博客了.趁着这次公司招新人,把之前整理的文档又整理了一次,顺便 ...

  8. 对QP中RTC的理解

    1.概念 RTC(Run To Completion)是运行到完成为止的意思.在状态机中,从源状态到目标状态的转换动作要运行到完成. 从字面上来看,这个过程像是不可中断的,但实际并不是,这个过程可以被 ...

  9. python教程(三)·函数与模块

    函数,这和数学中的函数有点关联,但又不是完全等价 概念 不说的这么官方,我就已自己的理解来表达 ^_^ 在数学中,把一个或多个值(输入x)进行一定的计算或者映射,得到一个值(输出y),这个计算或者映射 ...

  10. 关于C链表的实现

    学习了数据结构后,自己学习写了一个链表的程序.初步功能是实现了.但是不知道会不会有一些隐含的问题.所以希望大佬指导指导 /******************/ /*一个小的链表程序*/ /***** ...