源码分析八(org.springframework.util包之StringUtils类))
一:spring框架util包中的StringUtils类主要是处理关于字符串
的功能方法,下面直接结合代码分析:
//判断字符串是否为空,如果为nul或者""则返回true,否则返回false
public static boolean isEmpty(Object str)
{
return str == null || "".equals(str);
}
//判断字符串是否有长度,不等于null同时长度大于0,则为true
//这里重载两个hasLength方法,其中CharSequence是String的父类,是接口
public static boolean hasLength(CharSequence str)
{
return str != null && str.length() > 0;
} public static boolean hasLength(String str)
{
return hasLength(((CharSequence) (str)));
}
//如果为空则直接返回false,如果字符串中有一个不是空白,则表示
//有内容,返回true
public static boolean hasText(CharSequence str)
{
if(!hasLength(str))
return false;
int strLen = str.length();
//遍历字符序列,如果其中有一个不是空白,则返回true
for(int i = 0; i < strLen; i++)
if(!Character.isWhitespace(str.charAt(i)))
return true; return false;
} public static boolean hasText(String str)
{
return hasText(((CharSequence) (str)));
}
//判断字符串是否包含空白,如果为空则直接返回false,,遍历字符序列,如果其中
//有一个字符是空白,则返回true,如果都不是,返回false
public static boolean containsWhitespace(CharSequence str)
{
if(!hasLength(str))
return false;
int strLen = str.length();
for(int i = 0; i < strLen; i++)
if(Character.isWhitespace(str.charAt(i)))
return true; return false;
} public static boolean containsWhitespace(String str)
{
return containsWhitespace(((CharSequence) (str)));
}
//去除字符串前后的空白
public static String trimWhitespace(String str)
{
if(!hasLength(str))
return str;
StringBuilder sb;
//去除字符串前导空白
for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(0)); sb.deleteCharAt(0));
//去除字符串后导空白
for(; sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1)); sb.deleteCharAt(sb.length() - 1));
return sb.toString();
}
//去除字符串所有空白
public static String trimAllWhitespace(String str)
{
if(!hasLength(str))
return str;
StringBuilder sb = new StringBuilder(str);
//从第一个字符开始判断,是否为空白,如果是则删除,如果不是则index加1
//判断第二个,然后一直到sb.length=index,则跳出循环
for(int index = 0; sb.length() > index;)
if(Character.isWhitespace(sb.charAt(index)))
sb.deleteCharAt(index);
else
index++; return sb.toString();
}
//去除前导空白,只取空白的前一部分
public static String trimLeadingWhitespace(String str)
{
if(!hasLength(str))
return str;
StringBuilder sb;
//去除前导空白
for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(0)); sb.deleteCharAt(0));
return sb.toString();
}
//去除后导空白,取去除空白后一部分
public static String trimTrailingWhitespace(String str)
{
if(!hasLength(str))
return str;
StringBuilder sb;
//去除后导空白
for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1)); sb.deleteCharAt(sb.length() - 1));
return sb.toString();
}
//删除前导为leadingCharacter的字符
public static String trimLeadingCharacter(String str, char leadingCharacter)
{
if(!hasLength(str))
return str;
StringBuilder sb;
//只要前导是指定字符则删除
for(sb = new StringBuilder(str); sb.length() > 0 && sb.charAt(0) == leadingCharacter; sb.deleteCharAt(0));
return sb.toString();
}
//删除后导字符trailingCharacter
public static String trimTrailingCharacter(String str, char trailingCharacter)
{
if(!hasLength(str))
return str;
StringBuilder sb;
//只要后导是指定字符则删除
for(sb = new StringBuilder(str); sb.length() > 0 && sb.charAt(sb.length() - 1) == trailingCharacter; sb.deleteCharAt(sb.length() - 1));
return sb.toString();
}
//忽略大小写,判断字符串是否已prefix开始
public static boolean startsWithIgnoreCase(String str, String prefix)
{
//如果源字符串str或者前缀字符串prefix为null,则返回false
if(str == null || prefix == null)
return false;
//如果str以prefix开始,return true
if(str.startsWith(prefix))
return true;
//如果源字符串的长度小于prefix的长度,返回false
if(str.length() < prefix.length())
{
return false;
} else
{
将源字符串prefix长度转换为小写,前缀字符串也转换为小写,比较是否相等
String lcStr = str.substring(0, prefix.length()).toLowerCase();
String lcPrefix = prefix.toLowerCase();
return lcStr.equals(lcPrefix);
}
}
//忽略大小写,判断源字符串str是否以suffix结尾,处理逻辑类似上一个方法
public static boolean endsWithIgnoreCase(String str, String suffix)
{
if(str == null || suffix == null)
return false;
if(str.endsWith(suffix))
return true;
if(str.length() < suffix.length())
{
return false;
} else
{
String lcStr = str.substring(str.length() - suffix.length()).toLowerCase();
String lcSuffix = suffix.toLowerCase();
return lcStr.equals(lcSuffix);
}
}
源码分析八(org.springframework.util包之StringUtils类))的更多相关文章
- 源码分析六(org.springframework.util包之Assert类)
一:抽象类Assert 抽象类不能够实例化对象,但是可以被继承,Assert类是功能类,所以方法都是static修饰 所以可以直接 类名.方法 调用. public abstract class A ...
- ABP源码分析八:Logger集成
ABP使用Castle日志记录工具,并且可以使用不同的日志类库,比如:Log4Net, NLog, Serilog... 等等.对于所有的日志类库,Castle提供了一个通用的接口来实现,我们可以很方 ...
- Vue.js 源码分析(八) 基础篇 依赖注入 provide/inject组合详解
先来看看官网的介绍: 简单的说,当组件的引入层次过多,我们的子孙组件想要获取祖先组件的资源,那么怎么办呢,总不能一直取父级往上吧,而且这样代码结构容易混乱.这个就是这对选项要干的事情 provide和 ...
- dubbo源码分析2——SPI机制中的SPI实现类的读取和预处理
SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓 ...
- Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
阅前提醒 全文较长,建议沉下心来慢慢阅读,最好是打开Idea,点开Spring源码,跟着下文一步一步阅读,更加便于理解.由于笔者水平优先,编写时间仓促,文中难免会出现一些错误或者不准确的地方,恳请各位 ...
- Heritrix源码分析(八) Heritrix8个处理器(Processor)介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/643367 本博客已迁移到本人独立博客: http://www.yun5u ...
- Spring源码分析之——导入spring-framework源代码到Eclipse
本人最近想要研究spring的源代码,但当要导入spring sub project到Eclipse里面去的时候遇到了不少麻烦(其实都怪自己想当然). 找到spring-framework的gitHu ...
- motan源码分析八:涉及到底层的客户端调用
之前我们分析了客户端调用服务端的源码,但是没有涉及到通讯层和序列化层,本文将之前讲过的内容做一次串联. 1.上层通过动态代理调用refer的call,每个refer又对应一个nettyclient,下 ...
- MyBatis框架的使用及源码分析(八) MapperMethod
从 <MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory> 文中,我们知道Mapper,通过MapperProxy ...
随机推荐
- CSS 自适应
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- RavenDb学习(六)查询补充特性
.延迟加载 原来的查询方式如下: IEnumerable<User> users = session .Query<User>() .Where(x => x.Name ...
- Hbase 学习(四) hbase客户端设置缓存优化查询
我们在用hbase的api对hbase进行scan操作的时候,可以设置caching和batch来提交查询效率,那它们之间的关系是啥样的呢,我们又应该如何去设置? 首先是我们的客户端代码. 当cach ...
- Java 将图片转二进制再将二进制转成图片
import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOu ...
- SpringBoot使用端口运行
通过java -jar app.jar --name="Spring" --server.port=9090方式来传递参数. 参数用--xxx=xxx的形式传递. 转自http:/ ...
- tf变换(1)
TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系的坐标. 使用tf功能包,a. 监听tf变换: 接收并缓存系统中发布 ...
- hashMap 根据已有知识知道的
public V put(K key, V value) { //假如table为空 if (table == EMPTY_TABLE) { inflateTable(threshold); } // ...
- (笔记)Mysql命令update set:修改表中的数据
update set命令用来修改表中的数据. update set命令格式:update 表名 set 字段=新值,… where 条件; 举例如下:mysql> update MyClass ...
- Aizu_Insertion Sort
原题链接:https://vjudge.net/problem/Aizu-ALDS1_1_A 题目描述 Write a program of the Insertion Sort algorithm ...
- css 解决父div与子div不在同一容器的问题
<html> <head> </head> <body> <div style="margin:0 auto;width:600px;b ...