`
mymobile
  • 浏览: 182197 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Commons-lang学习笔记

阅读更多
Commons-lang记录:

一个最常用的工具,作为 jdk的补充,有必要看一下源码 ~~

篇章 1—— package: lang.*

Lang.*下有很多 Utils类,提供了若干 static方法供调用,涵盖了字符串操作、字符操作、 JVM交互操作、归类、异常和位域校验等等。

首先看看字符串处理类 StringUtils

全部的静态方法, StringUtils继承自 Object。属于 null safe操作。何谓 null safe,就是遇到是 null的 string对象,也会 quietly的把它处理掉,而不会有 NullPointerException异常,如果有这个异常,那么就是该类的 bug了 ~~

看看 StringUtils的各种方法对比吧:

比较一下 isEmpty和 isBlank这两个方法。 isEmpty在判断 ""这样的字符串时返回的是 false,而 isBlank返回的是 true。这就明显了吧, empty只对 null和 ””有效,而 blank对 ” ”也有效 ~~

Clean方法和 trim方法都封装了 String的 trim方法,唯一的不同是 clean将 null处理为 ””,而 trim将 null处理为 null。

以 Strip开头的一系列方法基本可以看做 trim方法的扩展,但是更强大的是可以处理前导和后续的各种 stripChars,不局限于空白符了。

Equal系列的方法加入了 null的判断,如果都是 null那么也返回 true。

IndexOf与 String的 indexOf类似,加入了 null的判断而已,且多了一个 ordinalIndexOf方法,可以找到第 n个字符串出现的位置。还有一个 indexOfIgnoreCase可以不考虑大小写的判断位置匹配。实际代码是调用了 string的 regionMatches方法,只不过在 ignorecase参数上选择了 true。

Contains的实现是一样的,只是加入了 null的判断。剩下的 indexOfAny和 containsAny方法都很不错,完成了集合的匹配 ~~都包含一个字符数组的参数,可以检测字符串中是否包含字符数组中的任意个元素,算法没有特殊的地方,复杂度 O( MN)吧 ~~相比较而言, contains系列的 containsOnly和 containsNone我倒是觉得更有用一些。

Substring系列的方法,除了 substring封装了 string的 substring完成了 null safe的检查外,还加入了 left、 right和 mid方法。顾名思义, left可以得到最左边的若干个字符作为字串,其实就是调用了 str.substring(0, len);而 right同样是调用了 str.substring(str.length () - len);另外还有一些比如 substringBefore和 substringAfter之类的,用法类似。 substringBetween可以找到两个字串中间的子串。

Split是值得说道的一个改动,原本大量封装 string的方法, split是个例外,大家知道, string的 split方法用到的参数是一个正则式,虽然强大,但是有时候容易出错。而且 string并没有提供简化版本。 StringUtils提供的 split改变了这一状况,开始使用完整的字符串作为参数,而不是 regex。同时,对类似功能的 jdk版本的 StringTokenizer,在内部方法 splitWorker中有段注释: Direct code is quicker than StringTokenizer. 也就是说,这个是更快的一个工具了 ~~

对于 split的反向操作 join,用到了一个 lang.text包下的 StrBuilder类。主要实现即将若干个 object数组一个个的 append到 buffer中。然后最后 toString就好。

Delete和 remove可以用来删除 string中的内容,比如 deleteSpaces可以除去字符串中的所有空白字符( " "t"r"n"b"); remove更强大,可以 removeStart(只匹配开头)和 removeEnd(只匹配结尾),当然 remove可以删掉字符串中的任意字串。

Replace,同理这里的 replace不像 string中的一样是基于正则的,用起来更简单。而且有 replaceOnce和 replaceEach等各种用法。还有一个辅助的 overlay方法,可以直接替换 ~~

Chomp和 chop我觉得是比较鸡肋的一个功能了,去除字符串的最后一个字符或者尾部串,这功能很必要么?

Repeat将已有字符串复制 n次。

Pad是一个很有意思的方法,可以将一个已有字符串扩展 n个大小,并且填充特定的字符。比如 StringUtils.rightPad("bat", 5, 'z') = "batzz" 。 Pad调用了 string的 concat方法。

Case conversion的操作就不用多讲了, upper和 lower都是一样的。补充说的是, capitalize系列的方法真的很贴心。

补充一个容易让人误会的方法—— countMatches,记录一个字符串 str中某串 sub出现的次数。为什么容易误会,“ aaaa”中有多少“ aa”呢?用该方法得到的答案是 2~~~大家懂的

Is打头的一系列方法都非常强大,可以判断字符串是否符合某种格式,比如 isAlpha判断是否都是字母, isNumeric判断是否都是数字等等等等。

Reverse这个功能出来后,最先想到的是当初笔试面试时候的一堆回文字符串翻转之类的考试都要囧了。

Abbreviate方法我觉得是相当实用的一个方法封装,我们在各种应用中都很常见的“一堆文字……”就是这个方法的最好应用。

Difference方法返回两个字符串的不同处,可以说是返回第二个字符串的第一个不同的位置开始的子串。 indexOfDifference返回不同处的位置。

getCommonPrefix这个方法也很好,可以找到一组字符串的公共前缀。当然只是调用了 indexOfDifference这个方法。

接着就是 ArrayUtils了

ArrayUtils是一个对数组进行特殊处理的类。当然 jdk中的 Arrays是有一些功能的, Array也提供了一些动态访问 java数组的方法,这里的 ArrayUtils扩展提供了更多的功能。

第一个可以说的方法是 toMap方法,该方法就是将一个二维数组转换为一个 HashMap。当然对输入的参数要求比较严格,会抛出各种异常。 NullToEmpty方法是一个防御性编程方法的代表,将 null的数组直接变为一个空(长度为 0)的数组。

Subarray方法提供了基于拷贝的子数组生成方法。 Reverse方法提供了一个数组翻转的算法实现。 indexOf方法是一个查找指定对象的线性数组查找方法。还提供了一系列装箱拆箱方法( toPrimitive和 toObject),就是将 Integer之类的对象类型变成 int,反之亦然。 addAll方法提供了基于数组拷贝的数组合并,就是将数组 1和数组 2合并为一个新的数组返回。当然,

add方法虽然只添加了一个元素,但是也是要数组拷贝的(数组的效率啊!!!)。同样的原理,

remove(删除)方法也是基于数组拷贝的,以指定删除元素为界,分别两次拷贝它前后的子数组。

再来就是一些补充了

把一些看到的有意思的可能有用的接口方法提取出来。

RandomStringUtils类里有一个 random方法,可以产生一个固定长度的随机字符串。用到了 java.util.Random。其中的注释中提到了对 Unicode中没法处理的 surrogate的处理方法。如果不幸随机到那个位置( D800-DBFF, DC00-DFFF),那么算法中将进行 count补充,即提供一次重新随机的机会。

另外一个比较有趣的类是 StopWatch,这是一个秒表类,通过 start方法开始计时,通过 split方法截断每一次的分段计时, suspend方法可以暂停秒表, resume恢复计时。最后 stop后可以通过 getTime获得总共计时。当然在 split后的分段计时可以用 getSplitTime获取。技术实现上就是定义了几个状态,然后通过每次状态的转变和系统时间的差来表达计时效果。



转载地址:http://www.blogjava.net/changedi/archive/2011/03/24/346976.html

分享到:
评论

相关推荐

    springMVC-个人学习笔记.docx下载

    对于 spring3.2.3 版本,除了 Spring 自身的库,还需要 Commons 库,如 Commons FileUpload、Commons IO 和 Commons Lang。在 web.xml 文件中,需要配置 DispatcherServlet,例如: ```xml <servlet-name>...

    Jakarta Commons CookBook学习笔记

    ### Jakarta Commons CookBook 学习笔记 #### 一、Commons Lang: EqualsBuilder and HashCodeBuilder **1.1 概述** `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于...

    struts2学习笔记

    在深入探讨Struts2的学习笔记之前,先来理解它的核心概念。 **1. Struts2依赖的JAR包** Struts2的运行离不开一系列的依赖库,包括: - `struts2-core-2.1.6.jar`:这是Struts2的核心库,包含了Struts2框架的主要...

    Jakarta Commons笔记

    - **org.apache.commons.lang.enum**:该包已不再推荐使用,建议使用`org.apache.commons.lang.enums`。 - **org.apache.commons.lang.enums**:用于处理枚举类型。 - **org.apache.commons.lang.exception**:增强...

    velocity学习笔记与struts2整合

    4. commons-lang-2.1.jar - 常用的Java语言工具包。 5. velocity-1.5.jar - Velocity核心库。 6. velocity-tools-1.4.jar - 提供Velocity的工具支持。 7. velocity-tools-view-1.4.jar - 用于视图处理的工具包。 8. ...

    JSON学习笔记

    这篇"JSON学习笔记"可能涵盖了以下几个关键知识点: 1. JSON的基本结构:JSON数据由键值对(key-value pairs)组成,键和值之间用冒号隔开,键值对之间用逗号分隔。键必须是字符串,而值可以是字符串、数字、布尔值...

    CXF webservice初学笔记

    6. **Commons Lang** (commons-lang-2.5.jar):Apache Commons Lang 是一个实用工具类库,补充了 Java 核心库中的语言特性,包括字符串处理、日期和时间操作等。 7. **Commons Pool** (commons-pool-1.5.5.jar):...

    struts2综合笔记

    - `commons-lang-2.5.jar`: Java 语言包增强。 - 可参考 `struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib` 中的 Jar 包。 2. **配置核心过滤器**: - 在 `web.xml` 中添加 Struts2 核心...

    ssh笔记及jar包

    首先,SSH学习笔记可能包含了以下内容: 1. **Struts**:Struts是基于MVC设计模式的Java Web框架,负责处理用户请求并将其转发到相应的Action。笔记可能会讲解Struts的配置文件(struts-config.xml),ActionForm对象...

    黑马程序员_struts2框架2016版视频_struts2_day01笔记

    - **commons-lang3**: 提供字符串和数据操作的公共方法。 - **javassist**: 字节码操作库。 #### 1.4 Struts2入门理论 **JavaEE设计模式** 对于理解Struts2的工作原理非常重要。其中,**前端控制器模式**是Struts2...

    Jakarta Commons cookbook.chm与中文版的笔记

    在阅读《Jakarta Commons Cookbook》时,你可以学习如何有效地利用这些组件来提升你的Java项目。例如,了解如何使用` FileUtils.copyFile()`方法复制文件,或通过` StringUtils.join()`将数组元素连接成字符串。此外...

    [Jakarta Commons笔记]

    【Jakarta Commons笔记】 Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了...

    ssh整合jar包

    4. 其他依赖库:如log4j、slf4j、commons-lang、commons-logging等,为SSH提供日志记录和其他辅助功能。 使用SSH整合jar包,开发者无需逐个下载和配置这些框架的依赖,可以大大节省时间和精力。在实际开发中,通常...

    java内部学习笔记.docx

    3. StringUtils类:Apache Commons Lang提供的字符串操作工具类。 4. StringBuilder类:可变的字符序列,效率高于String。 5. 正则表达式:用于模式匹配和字符串操作。 6. Date类:表示特定的瞬间,精确到毫秒。 7. ...

    JDBC学习笔记.docx

    在使用Apache Commons Lang或其他类似的库时,可能会遇到缺少包的问题。这时需要下载相应库的jar文件,将其添加到项目Build Path中,以解决报错。 **10. JUnit测试** 进行单元测试时,可以利用JUnit创建测试类,...

    Mayfly-开源

    3. `commons-lang-2.1.jar`:Apache Commons Lang库,包含了大量用于操作和处理Java语言特性的工具方法。 4. `mayfly-0.3.jar`:这是Mayfly的主要库文件,包含了所有核心功能的实现。 5. `LICENSE-2.0.txt`:包含了...

    Android备忘录记事本,又加工了一下

    - **Apache Commons Lang**:提供了一些有用的字符串处理、数组操作和日期时间功能。 - **Apache Commons IO**:提供了文件和流操作的辅助方法。 4. **项目实践** 开发"SimpleNotePad"时,开发者需要实现以下...

    我的智囊团ssh源代码

    最后,由于源代码中缺失jar包,开发者需要自行寻找或下载相应的依赖库,如Struts、Spring、Hibernate的核心库,以及其他可能的第三方库,如log4j(日志)、commons-lang(常用工具类)等,确保项目可以顺利运行。...

    java-learning-notes

    java学习笔记的测试代码 Apache commons Lang 加强java.lang的核心api,提供一些操纵String,数值的方法,反射,并发,创建对象和序列化和系统参数。还有有一些额外的工具帮助构造hashCode,toString,equals这样的...

Global site tag (gtag.js) - Google Analytics