浏览了一下《Jakarta Commons Cookbook》(Timothy M. O'Brien)。里面介绍了commons各子项目提供的各种实用类,大致浏览了一遍,做个总结,以后遇到相同的问题可以到commons里去寻找答案。
以下列出一些我认为比较有价值的功能,方便以后参考:
lang:
1)反射地生成hashcode、equals、toString方法。
2)反转数组
3)在数组中搜索指定项,并可设置起始位置
4)线程安全地使用日期格式化
5)验证方法参数的合法性
6)为程序计时
lang.StringUtils、WordUtils:
1)检查空字符串
2)省略字符串,可指定缩减位置
3)搜寻被嵌套的字符串,解析字符串
4)自定义要消除的字符,并执行操作
5)去掉串尾的换行符和回车符
6)反转字符串
7)以单词为单位反转字符串
8)设定一行的显示单词数量,且不破坏单词
9)检测字串内容(数字?字符?空格?混合?)
10)非海量文本中统计单词出现次数
11)计算字符串差别(差别字符,位置,编辑距离)
codec:12)计算字符串的soundex编码(语音编码)
beanUtils、propertyUtils
1)对某个bean的属性反射地访问、检查类型或设置或复制或克隆或检查可访问性,包括简单的、带下标的或Map型的属性
2)用Predicate验证bean
3)用map封装bean属性
4)动态创建bean
collections.comparators,beanUtils
1)将comparator链接为comparatorChain
2)以固定顺序比较(如“冠军”、“亚军”、“季军”)
3)使用predicate模拟电路的门逻辑
4)用transformer和closure封装对对象的操作,并可创建transformer链或closure链以及有条件的closure(commons functor项目中的UnaryFunction和UnaryProcedure对象可代替它们)
5)使用loopingIterator实现循环遍历
6)结合Predicate和FilterIterator筛选地遍历集合
7)使用Bag,一个维护对象数量或顺序的仿collection
8)使用MultiMap可将一个键对应到多个值上
9)使用BidiMap,根据值检索相应的键
10)使用LRUMap作为缓存
11)使用LazyMap直到检索时才加载相应的项
除了以上列出的功能外,commons还提供Digester包和BetWixt包来实现xml文件和java对象之间的映射和序列化功能;
CLI项目用来解析命令行参数;
Configuration项目用来读取property文件形式或xml形式的程序配置文件;
Math项目用来进行一些科学计算,涉及分数、复数运算、线性方程求解、求相关性等;
FreeMarker和Velocity提供两种可选的模板技术;
IO项目提供文件操作和流操作的一些便利,过滤文件等;
ORO项目专门处理正则表达式;
Net项目实现简单的FTP和mail客户端;
HttpClient项目处理对Http协议的编程;
Slide处理WebDEV协议的编程;
JXPath实现了xPath查询,用于查询xml节点和对象图等;
Lucene,一个高效的文本搜索实现。