Jakarta Commons 学习
2.1.
1. 概述...........................................................................................................................................4
2. Commons Lang.........................................................................................................................4
commons.lang 包 ..........................................................................................................4
2.1.1. ArrayUtils..........................................................................................................5
2.1.2.
StringUtils .........................................................................................................7
2.1.3. BitField............................................................................................................10
2.1.4. BooleanUtils....................................................................................................10
2.1.5. CharRange.......................................................................................................10
2.1.6. CharUtils .........................................................................................................11
2.1.7. ClassUtils ........................................................................................................11
2.1.8. ObjectUtils ......................................................................................................11
2.1.9. RandomStringUtils..........................................................................................12
2.1.10. SerializationUtils.............................................................................................12
2.1.11. StringEscapeUtils............................................................................................12
2.1.12. SystemUtils.....................................................................................................12
2.1.13. Validate ...........................................................................................................12
2.1.14. WordUtils........................................................................................................13
commons.lang.builder 包............................................................................................13
2.2.1. CompareToBuilder..........................................................................................16
2.2.2.
EqualsBuilder..................................................................................................16
2.2.3. HashCodeBuilder ............................................................................................17
2.2.4.
ToStringBuilder...............................................................................................18
2.2.5.
ToStringStyle 和 StandardToStringStyle.........................................................18
commons.lang.math 包 ...............................................................................................19
commons.lang.time 包 ................................................................................................21
DateFormatUtils..............................................................................................23
DateUtils .........................................................................................................23
DurationFormatUtils .......................................................................................23
SimpleDateFormat ..........................................................................................24
StopWatch .......................................................................................................24
commons.lang.enums 包............................................................................................24
commons.lang.exception 包........................................................................................24
commons.lang.mutable 包 ..........................................................................................24
3. Commons BeanUtils ...............................................................................................................24
commons.beanutils 包.................................................................................................25
3.1.1.
BeanUtils.........................................................................................................25
3.1.2.
BeanUtilsBean.................................................................................................28
3.1.3.
PropertyUtils ...................................................................................................29
3.1.4.
PropertyUtilsBean...........................................................................................29
3.1.5.
ConvertUtils ....................................................................................................29
3.1.6.
ConvertUtilsBean............................................................................................30
3.1.7.
ConstructorUtils ..............................................................................................30
3.1.8. MethodUtils.....................................................................................................31
3.1.9.
DynaBean/DynaClass/DynaProperty ..............................................................32
3.1.10. BasiceDyanBean/BasicDynaClass ..................................................................32
3.1.11. WrapDynaBean/WrapDynaClass/ConvertingWrapDynaBean........................33
3.1.12.
JDBCDynaClass/ResultSet/ResultSetIterator/RowSet....................................33
3.1.13. LazyDynaBean/LazyDynaClass/LazyDynaMap.............................................35
4. Commons Collections.............................................................................................................36
commons.collections.bag ............................................................................................37
commons.collections.buffer ........................................................................................38
commons.collections.bidimap.....................................................................................39
2.4.1.
2.4.2.
2.4.3.
2.4.4.
2.4.5.
4.1.
4.2.
4.3.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
3.1.
4.5.1.
4.5.2.
4.5.3.
4.5.4.
4.4. Comparator 组.............................................................................................................40
4.5. 算子组.........................................................................................................................41
Predicate..........................................................................................................44
Transformer.....................................................................................................45
Closure ............................................................................................................46
Factory ............................................................................................................46
4.6. Collections 组 .............................................................................................................47
FastArrayList/FastHashMap/FastTreeMap .....................................................47
4.6.1.
ExtendedProperties .........................................................................................47
4.6.2.
4.6.3.
BoundedCollection/BoundedMap...................................................................50
4.6.4. MultiKey .........................................................................................................50
4.7. Map 组 ........................................................................................................................51
4.7.1. MultiMap.........................................................................................................51
BeanMap .........................................................................................................51
4.7.2.
LazyMap .........................................................................................................52
4.7.3.
CaseInsensitiveMap ........................................................................................53
4.7.4.
4.7.5.
IdentityMap.....................................................................................................53
4.7.6.
LRUMap .........................................................................................................53
4.7.7. MultiKeyMap..................................................................................................53
ReferenceMap/ReferenceIdentityMap ............................................................54
4.7.8.
4.7.9.
SingletonMap ..................................................................................................54
List 组 .........................................................................................................................54
CursorableLinkedList......................................................................................54
FixedSizeList...................................................................................................54
LazyList...........................................................................................................54
NodeCachingLinkedList .................................................................................55
TreeList ...........................................................................................................55
5. Commons Codec.....................................................................................................................55
commons.codec.binary................................................................................................56
Base64.............................................................................................................56
Hex..................................................................................................................56
BinaryCodec....................................................................................................57
commons.codec.digest ................................................................................................57
DigestUtil ........................................................................................................57
6. Commons Betwixt...................................................................................................................58
7. Commons Digester..................................................................................................................59
8. Commons CLI.........................................................................................................................62
9. Commons Discovery...............................................................................................................63
4.8.1.
4.8.2.
4.8.3.
4.8.4.
4.8.5.
5.1.1.
5.1.2.
5.1.3.
5.2.1.
4.8.
5.1.
5.2.
1. 概述
可重用性是 Jakarta Commons 项目的灵魂所在。这些包在设计阶段就已经考虑了可重用
性问题。其中一些包,例如 Commons 里面用来记录日志的 Logging 包,最初是为其他项目
设计的,例如 Jakarta Struts 项目,当人们发现这些包对于其他项目也非常有用,能够极大地
帮助其他项目的开发,他们决定为这些包构造一个"公共"的存放位置,这就是 Jakarta
Commons 项目。
为了真正提高可重用性,每一个包都必须不依赖于其他大型的框架或项目。因此,
Commons 项目的包基本上都是独立的,不仅是相对于其他项目的独立,而且相对于 Commons
内部的大部分其他包独立。虽然存在一些例外的情况,例如 Betwixt 包要用到 XML API,但
绝大部分只使用最基本的 API,其主要目的就是要能够通过简单的接口方便地调用。
2. Commons Lang
2.1. commons.lang 包
Lang 包提供了一些有用的包含 static 方法的 Util 类。除了 6 个 Exception 类和 2 个已经
deprecated 的数字类之外,commons.lang 包共包含了 17 个实用的类:
ArrayUtils
BitField
BooleanUtils
CharEncoding
CharRange
CharSet
CharSetUtils
CharUtils
ClassUtils
ObjectUtils
用于对数组的操作,如添加、查找、删除、子数组、倒序、元
素类型转换等
用于操作位元,提供了一些方便而安全的方法
用于操作和转换 boolean 或者 Boolean 及相应的数组
包含了 Java 环境支持的字符编码,提供是否支持某种编码的判
断
用于设定字符范围并做相应检查
用于设定一组字符作为范围并做相应检查
用于操作 CharSet
用于操作 char 值和 Character 对象
用于对 Java 类的操作,不使用反射
用于操作 Java 对象,提供 null 安全的访问和其他一些功能
RandomStringUtils 用于生成随机的字符串
SerializationUtils 用于处理对象序列化,提供比一般 Java 序列化更高级的处理能
力
StringEscapeUtils 用于正确处理转义字符,产生正确的 Java、JavaScript、HTML、
StringUtils
SystemUtils
Validate
WordUtils
XML 和 SQL 代码
处理 String 的核心类,提供了相当多的功能
在 java.lang.System 基础上提供更方便的访问,如用户路径、Java
版本、时区、操作系统等判断
提供验证的操作,有点类似 assert 断言
用于处理单词大小写、换行等
2.1.1.ArrayUtils
给 int[],String[] 等 基本 类型或 基本 包装 类型 的 Array 加 上类 似 CollectionsAPI 提 供 的
add,remove,reverse,subarray, indexOf, lastIndexOf, isEmpty, clone,把 null 认为是空数组
参数
说明
在数组的某个位置或者最后插入一个值,
相当于对 System.arraycopy 做了个封装(数
组可以是 null)
两 个 同 类 型 数 组 叠 加 , 相 当 于 对
System.arraycopy 做了个封装(数组可以是
null)
拷贝一个数组(数组可以是 null)
检查值是否在数组内,数组可以是 null,
值如果是 null,则查数组内为 null 这一项
得到数组长度(数组可以是 null)
搜索数组的值(数组可以是 null)
检查数组为 null 或为空
比较两个数组中的内容,支持多维数组
两个数组长度是否相等,null 被视作空数
组
从下往上找搜索数组的值 (数组可以是
null)
删除数组中某个位置的值
删除数组中第一个匹配的值
反转数组
取得数组的一部分
将多维数组转为 map,第一维为 key,第二
维为 value
函数
add
add(Object[] array, int index, Object element)
add(Object[] array, Object element)
addAll
addAll(Object[] array1, Object[] array2)
clone
contains
getLength
indexOf
isEmpty
isEquals
isSameLength
lastIndexOf
remove
removeElement
reverse
subarray
toMap
clone(Object[] array)
contains (Object[] array, Object objectToFind)
getLength(Object array)
indexOf(Object[] array, Object objectToFind)
indexOf(Object[] array,
int startIndex)
isEmpty(Object[] array)
isEquals(Object array1, Object array2)
isSameLength(Object[] array1, Object[] array2)
Object objectToFind,
lastIndexOf(Object[] array, Object objectToFind)
lastIndexOf(Object[] array, Object objectToFind,
int startIndex)
remove(Object[] array, int index)
removeElement(Object[] array, Object element)
reverse(Object[] array)
subarray(Object[] array,
int endIndexExclusive)
toMap(Object[] array)
Map colorMap = Array.toMap(new String[][] {{
int startIndexInclusive,
toObject
toPrimitive
toString
{"RED", "#FF0000"},
{"BLUE", "#0000FF"}});
toString(Object array)
toString(Object array, String stringIfNull)
将 int 数组转成 Integer 数组,
将 Integer 数组转成 int 数组
将数组转换成类似{a,b}文本
这段代码说明了我们可以如何方便的利用 ArrayUtils 类帮我们完成数组的打印、查找、克隆、
倒序、以及值型/对象数组之间的转换等操作。
// data setup
int[] intArray1 = { 2, 4, 8, 16 };
int[][] intArray2 = { { 1, 2 }, { 2, 4 }, { 3, 8 }, { 4, 16 } };
package sean.study.jakarta.commons.lang;
import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
public class ArrayUtilsUsage {
public static void main(String[] args) {
Object[][] notAMap = {
{ "A", new Double(100) },
{ "B", new Double(80) },
{ "C", new Double(60) },
{ "D", new Double(40) },
{ "E", new Double(20) }
};
// printing arrays
System.out.println("intArray1: " + ArrayUtils.toString(intArray1));
System.out.println("intArray2: " + ArrayUtils.toString(intArray2));
System.out.println("notAMap: " + ArrayUtils.toString(notAMap));
// finding items
System.out.println("intArray1 contains '8'? "
+ ArrayUtils.contains(intArray1, 8));
System.out.println("intArray1 index of '8'? "
+ ArrayUtils.indexOf(intArray1, 8));
System.out.println("intArray1 last index of '8'? "
+ ArrayUtils.lastIndexOf(intArray1, 8));
// cloning and resversing
int[] intArray3 = ArrayUtils.clone(intArray1);
System.out.println("intArray3: " + ArrayUtils.toString(intArray3));
ArrayUtils.reverse(intArray3);
System.out.println("intArray3 reversed: "
+ ArrayUtils.toString(intArray3));
// primitive to Object array
Integer[] integerArray1 = ArrayUtils.toObject(intArray1);
System.out.println("integerArray1: "
+ ArrayUtils.toString(integerArray1));
// build Map from two dimensional array
Map map = ArrayUtils.toMap(notAMap);
Double res = (Double) map.get("C");
System.out.println("get 'C' from map: " + res);
}
}
以下是运行结果:
intArray1: {2,4,8,16}
intArray2: {{1,2},{2,4},{3,8},{4,16}}
notAMap: {{A,100.0},{B,80.0},{C,60.0},{D,40.0},{E,20.0}}
intArray1 contains '8'? true
intArray1 index of '8'? 2
intArray1 last index of '8'? 2
intArray3: {2,4,8,16}
intArray3 reversed: {16,8,4,2}
integerArray1: {2,4,8,16}
get 'C' from map: 60.0
2.1.2.StringUtils
StringUtils 类具有简单而强大的处理能力,从检查空串(对 null 的情况处理很得体),到分
割子串,到生成格式化的字符串,使用都很简洁,也很直截了当。
IsEmpty/IsBlank
Trim/Strip
Equals
if
a
checks
String contains
text
removes leading
and
trailing
whitespace
two
ompares
strings
null-safe
IndexOf/LastIndexOf/Contains
IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyBut
null-safe
index-of checks
index-of any of
a set of Strings
ContainsOnly/ContainsNone
Substring/Left/Right/Mid
SubstringBefore/SubstringAfter/SubstringBetween
Split/Join
Remove/Delete
Replace/Overlay
Chomp/Chop
LeftPad/RightPad/Center/Repeat
UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalize
CountMatches
IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable
DefaultString
String
of
does
contains
only/none
these
characters
null-safe
substring
extractions
substring
extraction
relative
other strings
to
splits a String
into an array of
substrings and
vice versa
removes part of
a String
Searches
String
replaces
String
another
a
and
one
with
removes the last
part of a String
pads a String
changes the case
of a String
the
counts
number
of
occurrences of
one String in
another
checks
the
characters in a
String
protects
against a null
input String
Reverse/ReverseDelimited
Abbreviate
Difference
LevensteinDistance
reverses
String
a
abbreviates
string
ellipsis
a
using
two
compares
and
Strings
reports on their
differences
the number of
changes needed
to change one
String
into
another
处理 String 的原则:
null
empty
space
whitespace
trim
null
a zero-length string ("")
the space character (' ', char 32)
the characters defined by Character.isWhitespace(char)
the characters <= 32 as in String.trim()
从下面代码中我们可以大致了解到这个 StringUtils 类简单而强大的处理能力,从检查空串
(对 null 的情况处理很得体),到分割子串,到生成格式化的字符串,使用都很简洁,也很
直截了当。
package sean.study.jakarta.commons.lang;
import org.apache.commons.lang.StringUtils;
public class StringUtilsAndWordUtilsUsage {
public static void main(String[] args) {
// data setup
String str1 = "";
String str2 = " ";
String str3 = "\t";
String str4 = null;
String str5 = "123";
String str6 = "ABCDEFG";
String str7 = "It feels good to use Jakarta Commons.\r\n";
// check for empty strings