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. java 编写小工具 尝试 学习(六)

    1.java 布局管理器-布局管理器之null布局(空布局) 的 学习,参考大神教程:http://www.cnblogs.com/liaoliao/p/5009445.html import jav ...

  2. Gradle Goodness: Check Task Dependencies With a Dry Run

    We can run a Gradle build without any of the task actions being executed. This is a so-called dry ru ...

  3. Spring Bean自动注册的实现方案

    这里Spring管理的Bean,可以认为是一个个的Service,每个Service都是一个服务接口 自动注册Service的好处: 1.根据指定的name/id获取对应的Service,实现简单工厂 ...

  4. LeetCode20.有效的括号 JavaScript

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  5. 个人开源Git地址

    开源Git地址 序号 Git地址 描述 1 https://github.com/winds-june 各种源码.直接调用的jar包          2    

  6. OC录制小视频

    OC录制小视频 用 AVCaptureSession + AVCaptureMovieFileOutput 来录制视频,并通过AVAssetExportSeeion 手段来压缩视频并转换为 MP4 格 ...

  7. webuploader实现上传视频

    之前有人让我做一个webuploader上传视频,但是一直没有时间,现在抽出了时间来.来完成以下这个简单的demo 第一步,上传视频和上传 图片有什么区别么? 其实是没有的,因为执行的操作都是上传,所 ...

  8. MySQL正则表达式的问题

    原本以为 正则表达式里面的特殊\d匹配数字放到sql语句里面也是适用的,没想到一直不匹配.但是放到编程语言java或者js里面又匹配.看了一下原来sql对正则的支持没有那么全面.一定要用[0-9]代表 ...

  9. laravel-admin 创建数据库并生成控制器

    以user表为例 1. 生成迁移:php artisan make:migration create_users_table 在 database/migration 中生成迁移文件,可对迁移文件进行 ...

  10. 大数据学习之Hadoop环境搭建

    一.Hadoop的优势 1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理. 2)高扩展性:在集群间分配任务数据,可方便的 ...