- 浏览: 304482 次
- 性别:
- 来自: 山西
博客专栏
-
天天编程
浏览量:21977
最新评论
-
变脸小伙:
运用到了场景中,希望接力
StringBuffer源码理解 -
fangsj:
IE9 安全设置 把这个禁用掉了
spring mvc 文件上传+本地预览+一次提交 -
xu-ch:
今天面试,遇到这题,求出了相似度,面试官问我算法原理是什么,悲 ...
计算字符串相似度算法——Levenshtein -
flywangfei:
你是创新工场的么?
计算字符串相似度算法——Levenshtein -
scwuwei:
六点起床比较好
《4点起床-最养生和高效的时间管理》读书笔记
StringUtils 源码,使用的是commons-lang3-3.1包。
下载地址 http://commons.apache.org/lang/download_lang.cgi
在看的时候建议简单的看一下标题即可 ,知道一下这个类中有哪些方法就够了。
1.构造方法
public StringUtils() { super(); }
它的父类是Object。
2.isBlank() 判断字符串是否为空白 (isNotBank())
//传入的CharSequence是String的接口,同样StringBuffer这些也是,可适用这里。Sequence的英语是序列的意思。 public static boolean isBlank(CharSequence cs) { //标记字符长度, int strLen; //字符串不存在或者长度为0 if (cs == null || (strLen = cs.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { //判断空格,回车,换行等,如果有一个不是上述字符,就返回false if (Character.isWhitespace(cs.charAt(i)) == false) { return false; } } return true; } //这个是isNotBlank() public static boolean isNotBlank(CharSequence cs) { return !StringUtils.isBlank(cs); }
3.isEmpty 是否为空,为空或者字符串长度为0。(isNotEmpty)
public static boolean isEmpty(CharSequence cs) { return cs == null || cs.length() == 0; } public static boolean isNotEmpty(CharSequence cs) { return !StringUtils.isEmpty(cs); }
4.trim 去前后空格
//直接采用的是字符串的去空格方法,多加了一个判空 public static String trim(String str) { return str == null ? null : str.trim(); } //下面看一下String类里面的trim方法 public String trim() { int len = count; int st = 0; int off = offset; /* avoid getfield opcode */ char[] val = value; /* avoid getfield opcode */ //从开始往后,到第一个不是空格的位置 while ((st < len) && (val[off + st] <= ' ')) { st++; } //从最后往前,到第一个不是空格的位置 while ((st < len) && (val[off + len - 1] <= ' ')) { len--; } //切割这个字符串 return ((st > 0) || (len < count)) ? substring(st, len) : this; }
4.1 trimToNull 去前后空格后,判断empty,
//去前后空格后,如果为空的话就返回null public static String trimToNull(String str) { String ts = trim(str); return isEmpty(ts) ? null : ts; }
4.2 trimToEmpty 空的话返回"",不返回null,并且去前后空格
public static String trimToEmpty(String str) { //这个Empty 是字符串 "" return str == null ? EMPTY : str.trim(); }
5.stripStart(str, stripChars) 去掉前端包含stripsChars的字符。
strip的英语意思是:去除,剥去
这个方法有点难理解,我先举两个官方例子
第二个参数是null的时候就会把第一个str的前端去空格 StringUtils.stripStart(" abc ", null) = "abc " 第二个参数是""的时候不处理 StringUtils.stripStart(" abc", "") = " abc" y出现在第二个参数里,所以去掉,x也一样,到a时就比对停止了。 StringUtils.stripStart("yxazbc ", "xyz") = "azbc "
下面是源码,一看就能理解上面三个例子了
//去除str里包含前端包含stripChars的字符 public static String stripStart(String str, String stripChars) { int strLen; //str为空或为""立即返回本身。 if (str == null || (strLen = str.length()) == 0) { return str; } int start = 0; if (stripChars == null) { //如果stripChars不存在的话,去空格和类似空格的换行等符号。这里去除的方式只是用start记录下来有几位。在最后之际substring切割(这个sunstring没有大写,看来是一个单词) while (start != strLen && Character.isWhitespace(str.charAt(start))) { start++; } } else if (stripChars.length() == 0) { //如果为空的话,不做任何处理 return str; } else { //剩下的情况,比对每一个字符,用str里面的每一个字符比对stripChars,只要stripChars里包含字符,就start++。INDEX_NOT_FOUUD 的值是-1, while (start != strLen && stripChars.indexOf(str.charAt(start)) != INDEX_NOT_FOUND) { start++; } } //进行切割,start在String类里的substring里表示起点beginIndex。 return str.substring(start); }
String的substring也简单举两个例字
"unhappy".substring(2) 结果: "happy" "Harbison".substring(3) 结果: "bison"
5.1 stripEnd(str, stripChars) 去除后端包含stripsChars的字符
//去除末尾的包含stripChars的字符 public static String stripEnd(String str, String stripChars) { int end; //str 为空直接结束 if (str == null || (end = str.length()) == 0) { return str; } if (stripChars == null) { //stripChars为空的时候,去后端的空格和类空格字符,这里end是--,end的初值在上面判空的时候就赋值了,(感觉这样写的不错) while (end != 0 && Character.isWhitespace(str.charAt(end - 1))) { end--; } } else if (stripChars.length() == 0) { ///stripChars为"",直接返回,结束 return str; } else { //一样比较,使用的常量 INDEX_NOT_FOUND依旧是-1 while (end != 0 && stripChars.indexOf(str.charAt(end - 1)) != INDEX_NOT_FOUND) { end--; } } //切割 return str.substring(0, end); }
和上面一样,就不举例了。
5.2 strip (str, stripChars) 前后都去除
//前后都去的操作 public static String strip(String str, String stripChars) { //判空 if (isEmpty(str)) { return str; } str = stripStart(str, stripChars); return stripEnd(str, stripChars); } //默认第二个参数为null,去前后空格和类空格的字符 public static String strip(String str) { return strip(str, null); }
5.3 stripAll(String[] strs,String stripChars) 对字符数组进行批量处理
//对字符数组进行批量过滤 public static String[] stripAll(String[] strs, String stripChars) { int strsLen; //如果字符数组为空,直接返回 if (strs == null || (strsLen = strs.length) == 0) { return strs; } //新建一个字符数组,用于返回(这样方便管理) String[] newArr = new String[strsLen]; for (int i = 0; i < strsLen; i++) { //处理 newArr[i] = strip(strs[i], stripChars); } return newArr; }
5.4 一些其他和strip相关方法
//null返回"" ,非null返回去空格的str public static String stripToEmpty(String str) { //EMPTY是空字符串 "" return str == null ? EMPTY : strip(str, null); } //null和""都返回null public static String stripToNull(String str) { if (str == null) { return null; } str = strip(str, null); return str.length() == 0 ? null : str; } //对任意个参数字符串进行处理 public static String[] stripAll(String... strs) { return stripAll(strs, null); }
6.equals(cs1,cs2) 比较两个字符串是否相等。
//在原有基础上只是做了null处理,这里写的很有意思。 public static boolean equals(CharSequence cs1, CharSequence cs2) { return cs1 == null ? cs2 == null : cs1.equals(cs2); }
6.1 equalsIgnoreCase 忽略大小写,Ignore的英语:忽略
//大小写忽略比较 public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2) { if (str1 == null || str2 == null) { return str1 == str2; } else { //这个方法实际上使用的String的regionMatches ,方法很复杂,里面很绕,大概就是全变成小写,使用Character.toUpperCase,就能变成小写了。 return CharSequenceUtils.regionMatches(str1, true, 0, str2, 0, Math.max(str1.length(), str2.length())); } }
7.indexof(cs1,cs2)判断前一个参数是否包含后一个参数
public static int indexOf(CharSequence seq, CharSequence searchSeq) { if (seq == null || searchSeq == null) { //INDEX_NOT_FOUND是-1,即没有包含 return INDEX_NOT_FOUND; } //这个其实调用的是seq.indexOf(searchSeq,0),后面的0是开始匹配的地方 return CharSequenceUtils.indexOf(seq, searchSeq, 0); } //下面的是多传入一个起点 public static int indexOf(CharSequence seq, CharSequence searchSeq, int startPos) {}
7.1 ordinalIndexOf 返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置,
//返回出现几次的位置,正向查 public static int ordinalIndexOf(CharSequence str, CharSequence searchStr, int ordinal) { //最后的参数fasle是正向查找 return ordinalIndexOf(str, searchStr, ordinal, false); } //返回出现几次的位置,反向查 public static int lastOrdinalIndexOf(CharSequence str, CharSequence searchStr, int ordinal) { //这里是true,反向查 return ordinalIndexOf(str, searchStr, ordinal, true); } //私有, private static int ordinalIndexOf(CharSequence str, CharSequence searchStr, int ordinal, boolean lastIndex) { if (str == null || searchStr == null || ordinal <= 0) { return INDEX_NOT_FOUND;//-1 } if (searchStr.length() == 0) { //要查询的字符为空 return lastIndex ? str.length() : 0; } int found = 0; int index = lastIndex ? str.length() : INDEX_NOT_FOUND; do { if (lastIndex) { //方向查找 index = CharSequenceUtils.lastIndexOf(str, searchStr, index - 1); } else { //正向查找 index = CharSequenceUtils.indexOf(str, searchStr, index + 1); } if (index < 0) { //-1的话机没找到,直接可返回 return index; } //找到了一次++。 found++; } while (found < ordinal); //知道都找到为止。 return index; }
7.2 lastIndexOf 最后出现的位置
public static int lastIndexOf(CharSequence seq, int searchChar) { if (isEmpty(seq)) { return INDEX_NOT_FOUND; } //这里的其实位置是seq的长度,使用的str.lastIndexOf return CharSequenceUtils.lastIndexOf(seq, searchChar, seq.length()); } //忽略大小写 public static int lastIndexOfIgnoreCase(CharSequence str, CharSequence searchStr) { if (str == null || searchStr == null) { return INDEX_NOT_FOUND; } return lastIndexOfIgnoreCase(str, searchStr, str.length()); }
8.contains 包含
下面是包含空字符的一个方法,其他店的都很类似,什么大小写,去空等等方法,就不列出来了
//是否包含白色空格,即相当于空格和空格类似字符 public static boolean containsWhitespace(CharSequence seq) { if (isEmpty(seq)) { return false; } int strLen = seq.length(); for (int i = 0; i < strLen; i++) { if (Character.isWhitespace(seq.charAt(i))) { return true; } } return false; }
9.休息
突然发现这个StringUtils有6000行代码,只看了四分之一。今天就先到这里吧。
发表评论
-
fastcgi中的多线程使用
2012-04-06 22:38 137940.背景 在项目中加入了 ... -
crc循环校验原理和实现
2012-03-29 23:33 194231.CRC简介 CRC(cyclical redundanc ... -
TreeMap源码理解
2012-01-31 10:44 01.首先看构造方法 public TreeMap() { ... -
HashMap源码理解
2012-01-30 21:33 1894看看HashMap对应的源码。 1.类、接口关系 ... -
StringUtils源码理解(下)
2012-01-16 15:46 2260本文介绍StringUtils的剩下的两个方法 1. ... -
StringUtils源码理解(中)有点意思的方法
2012-01-12 00:17 3700这次不按照前面的介绍了,方法都大同小异,下面就介绍几个有意思一 ... -
Properties源码理解
2012-07-05 12:23 3961Properties用来读配置文件 ... -
字符流(一)Reader和Writer源码理解
2011-11-27 20:32 15191.Reader 1.1 继承关系 public ... -
字符流(二)BufferedReader和BufferedWriter源码理解
2011-11-27 20:33 48541.BufferedReader 1.1 继承关系 ... -
DataInputStream和DataOutputStream源码理解
2011-11-17 00:02 44661.FilterInputStream简介 列出主要的内 ... -
InputStream,OutputStream源码理解
2011-11-09 22:50 34201.理解字节流和字符流 按流的形式分: 字节流和字符流。 ... -
File源码理解
2011-11-07 23:55 44041.构造函数 最基本的构 ... -
Thread源码理解
2011-10-23 14:36 43611.首先看一下Runnable接口 ... -
泛型简单回顾
2011-09-06 23:36 1342泛型的简介 1.java引入泛型的好处是安全简单。 2. ... -
LinkedList源码理解
2011-08-31 00:26 1455LinkedList源码 0.首先这个类中的两个变量 ... -
Vector源码理解
2011-08-29 23:44 1548Vector类 1.系统的变量 //记录元素的数组 pr ... -
ArrayList源码理解
2011-08-15 21:02 1764构造方法: ... -
Arrays源码理解
2011-08-15 20:34 13781.equals public static boo ... -
StringBuffer源码理解
2011-06-22 19:39 5725StringBuffer 存储和操作字符串 它所继承实现的类 ...
相关推荐
`StringUtils`是Apache Commons Lang库中的一个核心工具类,它提供了大量的静态方法,用于处理字符串。这个类在Java开发中非常常见,因为它弥补了Java标准库中对字符串操作的不足。`StringUtils`类包含了多种字符串...
在阅读《StringUtils 从报文中取得数据》这篇博客时,你可能会学到如何结合使用这些方法来解析复杂的报文数据,理解源码可以加深对工具类的理解,并能更好地应用到实际项目中。通过分析StringUtils 的源码,开发者...
在标签中提到的"源码",意味着这些工具类的实现细节是开放的,开发者可以通过阅读源码来理解其内部工作原理,学习优秀代码的设计模式和最佳实践。"工具"则表明它们是作为开发者的工具,帮助解决日常编码中的常见问题...
这个源码包,`commons-lang-2.0-src`,包含了Lang项目的2.0版本的所有源代码,是深入理解Java编程和学习开源项目开发的良好资源。下面,我们将详细探讨这个库中的关键知识点。 1. **StringUtils**: - `...
在`Connection`对象上,我们可以找到这些方法的实现,理解如何控制事务的ACID(原子性、一致性、隔离性和持久性)属性。 6. **异常处理**: 在源码中,可以看到大量的`SQLException`及其子类的抛出和处理,这有助于...
"apache-common最全的源码" 提供了该项目的完整源代码,这对于开发者来说是一份宝贵的资源,可以深入理解其实现机制,学习优秀的编程实践,以及进行二次开发或定制。 Apache Commons 包含了多个模块,每个模块都有...
在本文中,我们将深入探讨xUtils的源码,理解其内部实现机制,以便更好地利用这个强大的工具。 首先,我们来看xUtils的核心模块: 1. **网络请求库**:xUtils提供了HttpUtils,基于HttpURLConnection实现了网络...
本篇文章将深入探讨一个特定的Android应用项目——“英语朗读器”的源码,旨在帮助开发者理解并学习如何在Android环境中实现语音合成技术,为用户提供英语发音练习的功能。 首先,我们要明白,这个应用的核心功能是...
源码阅读不仅有助于理解这些工具类的内部工作原理,也有助于我们借鉴和应用到自己的项目中,提升代码的可维护性和复用性。对于Java开发者来说,掌握Apache Commons Lang 3.5的源码无疑是提升技能的重要一步。
源码分析可以帮助我们理解如何高效地处理这些常见任务。例如,StringUtils 类提供了各种字符串操作方法,如 join、split 和 startsWith,而 NumberUtils 提供了更安全的数字转换方法,避免了空指针异常。 2. **...
通过对xUtils 2.2.5源码的分析,我们可以学习到如何设计一个全面的Android工具库,理解各种组件的设计模式和实现原理,这对于提升个人的Android开发技能大有裨益。同时,源码中的最佳实践也能为我们的项目提供宝贵的...
以上工具类在实际开发中都有着广泛的应用,通过学习和理解这些源码,不仅可以提高编程效率,还能加深对Java语言特性的理解和运用。同时,这些工具类的源码也是学习设计模式、优化技巧的好材料。
例如,`org.apache.commons.lang3.StringUtils`库可能用于字符串操作,`httpclient`库可能用于网络通信。 在实现过程中,你需要考虑以下几点: - 界面设计:确保九宫格的布局适应不同屏幕尺寸,以及视觉效果的美观...
通过源码包,开发者可以直接查看和学习这些工具类的实现细节,理解其工作原理,这对于学习和提高Java编程技能非常有帮助。此外,对于需要定制或扩展已有功能的开发者,源码可以提供宝贵的参考和灵感。 总之,Apache...
其次,这个jar包还包含了源码,这意味着开发者可以查看并理解这些工具类的内部实现。这对于学习Java编程技巧、优化代码或者根据实际需求扩展功能非常有帮助。开发者可以查看源码,了解某个方法的具体实现,或者在...
这个"commons-lang-源码跟帮助"文件包含了Apache Commons Lang库的源代码和相关的帮助文档,对于理解其内部工作原理和优化你的Java项目非常有帮助。下面将详细探讨这个库中的关键知识点。 1. **StringUtils**: 这是...
这个源码包"commons-lang-2.4-src"包含了2.4版本的完整源代码,对于Java开发者来说,这是一个宝贵的资源,可以深入理解如何实现常见的编程任务,例如字符串处理、日期和时间操作、数学计算以及对象创建等。...
该资源是一个针对Android平台的开发项目,旨在实现类似快播应用中的搜索框上方悬浮的文字搜索...通过深入研究和理解这个源码,开发者可以更好地掌握Android UI的定制、Java编程技巧以及如何利用第三方库提升开发效率。
这个"commons-lang-2.5-sources.jar"源码包包含了Lang项目2.5版本的所有源代码,这对于开发者来说是极其宝贵的资源,因为它允许深入理解内部实现,进行学习、调试或自定义修改。 在Lang库中,有许多关键知识点值得...
在Android开发中,验证码是一种常见的安全机制,用于防止自动化脚本或机器人滥用服务。...通过学习和理解这份源码,开发者可以更好地理解和应用Android的UI交互、事件处理以及Java的随机数生成技术。