commons-lang源码解析之StringUtils
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("éclair") = "eclair"
- //local java 7 64bit
- StringUtils.stripAccents("éclair") = “é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的更多相关文章
- java.lang.Void类源码解析_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerEx ...
- spring 源码解析
1. [文件] spring源码.txt ~ 15B 下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB 下载( ...
- 【源码解析】阿里在线诊断工具greys源码
撸起袖子加油干!开门见山! 一.源码下载 下载代码: git clone https://github.com/oldmanpushcart/greys-anatomy.git 二.源码分析 2.1 ...
- t-io 集群解决方案以及源码解析
t-io 集群解决方案以及源码解析 0x01 概要说明 本博客是基于老谭t-io showcase中的tio-websocket-showcase 示例来实现集群.看showcase 入门还是挺容易的 ...
- Spring系列(六):Spring事务源码解析
一.事务概述 1.1 什么是事务 事务是一组原子性的SQL查询,或者说是一个独立的工作单元.要么全部执行,要么全部不执行. 1.2 事务的特性(ACID) ①原子性(atomicity) 一个事务必须 ...
- DataX 3.0 源码解析一
源码解析 基本调用类分析 任务启动由python脚本新建进程进行任务执行,后续执行由Java进行,以下将对java部分进行分 其中的调用原理机制. Engine 首先入口类为com.alibaba.d ...
- Spring源码解析之ConfigurationClassPostProcessor(二)
上一个章节,笔者向大家介绍了spring是如何来过滤配置类的,下面我们来看看在过滤出配置类后,spring是如何来解析配置类的.首先过滤出来的配置类会存放在configCandidates列表, 在代 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
随机推荐
- ARM v7-A 系列CPU的MMU隐射分析
ARM v7-A 系列CPU的MMU隐射分析 摘要:ARM v7-A系列的CPU加入了很多扩展,如多核处理器扩展.大物理地址扩展.TrustZone扩展.虚拟化扩展.若支持大的物理地址,则必须支持多核 ...
- 【译】2分钟介绍Rx
原文地址:https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877 翻译去掉了一些口水话(⊙o⊙) 诸位应该已经 ...
- MySQL必知必会 读书笔记二:MySQL使用
使用MySQL 选择数据库 使用USE关键字 USE database; 了解数据库和表 如果不知道可以使用的数据库名时,可用MySQL的SHOW命令来显示这些信息. SHOW DATABASES; ...
- hibernate的报错信息a different object with the same identifier value was already associated with the session解决办法
废话不多说,直接说原因,这是在hibernate中,有2个相同类型的实体类具有同样的主键标识符,然后调用update或者调用saveOrUpdate,我朋友出这个错的由于他想要update一条数据时, ...
- ;(function($,window,document,undefined){})(jQuery,window,document)
;(function($,window,document,undefined){})(jQuery,window,doucment) 1.自调函数(function(){})() 2.好处是不会产生任 ...
- 学生管理系统增删查基本操作(dom4j/sax技术)
基本代码: student.xml <?xml version="1.0" encoding="UTF-8"?><student> &l ...
- 2. HTML常用标签
相信大家常常会打开浏览器搜索一些内容或者浏览一些网站,在浏览器的页面上会呈现很多内容,但是具体的形式无非就是图片.文字以及链接(可以点击进入另一个页面的特殊文字),其中文字承载着巨大的作用,传递着各种 ...
- opencv3 学习四 - 图像减色
程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { // 灰度图 Mat original = ...
- python3的下载与安装
python3的下载与安装 1.首先,从Python官方网站:http://python.org/getit/ ,下载Windows的安装包 ython官网有几个下载文件,有什么区别?Python 3 ...
- 从python2.x到python3.x进阶突破
1.p2是重复代码,语言不同,不支持中文;p3则相反,其中代码不重复,语言用的相同的,并且是支持中文的. 2.p2中input中输入数字输出数字,输入字符串必须自己手动加引号才行;p3中input输出 ...