源码分析八(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 ...
随机推荐
- C#使用ActiveMQ实例
1. ActiveMQ消息总线简介 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已.主要用作不同进程.应用 ...
- CSS综合小练习
CSS选择器学了不少了,现在来实战一下. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- Android——监听事件总结
各种监听事件 1.按钮 Button(1)点击监听 btn_1.setOnClickListener(new View.OnClickListener() { (2)长按监听 btn_1.setOnL ...
- Linux(Centos7)yum安装最新redis
正如我们所知的那样,Redis是一个开源的.基于BSD许可证的,基于内存的.键值存储NoSQL数据库.Redis经常被视为一个数据结构服务器,因为Redis支持字符串strings.哈希hashes. ...
- docker监控
[编者的话]这篇文章作者是Usman,他是服务器和基础架构工程师,有非常丰富的分布式构建经验.该篇文章主要分析评估了五种Docker监控工具,包括免费的和不免费的:Docker Stats.CAdvi ...
- jQuery(二):jQuery选择器
jQuery选择器类似于CSS选择器,用来选取网页中的元素.例如: $("h3").css("background-color","red" ...
- TiDB 源码阅读系列文章(一)序
原创: 申砾 PingCAP 2018-02-28 在 TiDB DevCon2018 上,我们对外宣布了 TiDB 源码阅读分享活动,承诺对外发布一系列文章以及视频帮助大家理解 TiDB 源码.大 ...
- MFC——CDC
CDC类定义的是设备上下文对象的类,有称设备环境对象类. Windows使用与设备无关的图形设备环境(DC:Device Context)进行显示. 说到CDC类就不能不提一下GdiObject——图 ...
- JQ 获取地址栏参数
var cat_id = getParamValue("cat_id"); if(cat_id == null){ cat_id = 1; } $("#brand_cat ...
- In R, how to split/subset a data frame by factors in one column?
按照某列的值拆分data.frame My data is like this (for example): ID Rate State 1 24 AL 2 35 MN 3 46 FL 4 34 AL ...