为了锻炼自己看代码能力,也为了学习一些优秀的代码,从今天开始,对一些常用类的使用方法进行编写。
今天的主角是commons-lang包下的几个常用类
1.ArrayUtils
ArrayUtils的API里写到,这个类是用来操作数据,原始类型数据(如int[] a)和包装类的数据(如 Integer[] a)。这个类中所有的方法都不会抛出异常,不管里你向方法传入一个null类型,还是数组里含有对null的引用。
这个类中定义了一些空的数组(包括对象,字符串,基本类型和包装类型),长度为0
以下方法除非特殊说时,均有对对象,八种基本类型的处理
add(Object[],Object)方法,该方法是向原有的数据里增加一个元素,其实现的内部采用了产生一个比原数组长度大1的数组,把数据拷贝到新数组中,在最后一个位置加上要加入的元素,如果是向一个null,或一个空数组里增加数据,会自动产生一个与之对应的数组。
ArrayUtils.add(null, null) = [null]
ArrayUtils.add(null, "a") = ["a"]
ArrayUtils.add(["a"], null) = ["a", null]
ArrayUtils.add(["a"], "b") = ["a", "b"]
ArrayUtils.add(["a", "b"], "c") = ["a", "b", "c"]
add(Object[],int,Object)方法,该方法是向原有的数组时增加一个元素并填充到指定的位置
ArrayUtils.add(null, 0, null) = [null]
ArrayUtils.add(null, 0, "a") = ["a"]
ArrayUtils.add(["a"], 1, null) = ["a", null]
ArrayUtils.add(["a"], 1, "b") = ["a", "b"]
ArrayUtils.add(["a", "b"], 3, "c") = ["a", "b", "c"]
addAll(Object[],Object[]),返回两个数组合并的新数组
ArrayUtils.addAll(array1, null) = 实现对数组array1的克隆
ArrayUtils.addAll(null, array2) = 实现对数组array2的克隆
ArrayUtils.addAll([], []) = []
clone(Object[]) //实现对数组的克隆,其内部实现机制是调用了数组本身的clone方法
indexOf(Object[],Object,int)//查看数组里从int位置开始的Object所在的位置,如果没有找到就返回 INDEX_NOT_FOUND(=-1) 这个值其它的indexOf(Object[],Object)和contains(Object[],Object)//两个方法都是依赖于这个函数
lastIndexOf(Object[],Object,int)//在数组的int位置向前查找数组里是否包含Object对象
isEmpty(Object[])//查看数组是否为空
isSameLength(Object[],Object[])///查看两个数据的长度是否相同
remove(Object[],int)//移除数组里的第int个元素
removeElement(Object[],Obect)//移除数组里的Object元素
clone(Object[])//克隆Object数组
subarray(Object[],int i,int j)//得到数组Object里的第i到j位置的子数组
toMap(Object[] array)//将array数组转化为Map类型,array为Object[]类型或Map.Entry类型才行
toObject(int[])和toPrimitive(Integer[])//正好相反,是原始数据类型与包装类型之间的转换
2.BooleanUtils类
该类封闭了对bool值的常用操作,包括Boolean类与原始数据类型,及其它包装类之间的转换,与ArrayUtils类相同,该类也以优雅的方式处理null类型
isFalse(Boolean) 判断是否为假
isTrue(Boolean) 判断是否为真
negate(Boolean) 对参数进行否定运算
isNotFalse(Boolean) 判断是否不为假
isNotTrue(Boolean) 判断是否不为真
xor(Boolean[]),xor(boolean[])对数组内的元素进行异或运算
toBoolean(...) 转换为boolean
toBooleanObject(...)转换为Boolean类
这两个方法大至相同,关于其参数有两种,一种是单一参数,不同的数据类型,其处理方法不太相同,处理方法如下:
int 0-->false,其它-->true
boolean false-->false,true-->true
String yes,y,on,true-->true,其它-->false(不区分大小写)在处理不同的字符串时,性能上会不大相同,推荐大家使用true和false来使用
针对三个参数的情况,意思是将指定的参数按指定的规则来转化为boolean或Boolean类型,要转化的参数为第一个参数,如果第一个参数与第二个参数相同就会返回true,与第三个参数相同就会返回false,否则的话就会抛出一个异常
其它如:toInteger,toIntergerObject,toString,toStringOnOff,toStringTrue,toStringYesNo与些处理
3.CharEncoding
里面定义了六个字符常量,这几个常量均为JAVA平台所支持的编码方式,他们是:ISO_8859_1,US_ASCII,UTF_16,UTF_16BE,UTF_16LE,UTF_8
方法isSupported(String)来测试所传入的编码方法java是否支持
4.CharRange
字符范围类,该类的实例是不可变的类
用来一个字符串范围。
CharRange(char) //单字符
CharRange(char,boolean) //不在该字符范围
CharRange(char start,char end) //指一个从start到end的字符串范围
CharRange(char start,char end,boolean negated) //negated指定是否在前面start到end的字符串范围
contains(char) //判断是否在包含指定的字符
contains(CharRange) //判断是否包含指定的字符范围
getStart(),getEnd() //得到字符范围开始和结束位置
isNegated() //判断字条范围是否是否定的
5.CharSet
字符集合类,注意该类的实例是一个不可变的。
该类的实现原理是内部使用一个HashMap来包含所有的范围
该类内部定义了一些字符集合常量,如下:
EMPTY //空集合
ASCII_ALPHA //a-zA-Z
ASCII_ALPHA_LOWER //a-z
ASCII_ALPHA_UPPER //A-Z
ASCII_NUMRIC //0-9
getInstance(String) //得到一个CharSet的实例,string接受如下字符串
/* ^a-e
* a-e
* ^a
* a
* abe-gx-z
* 与正则表达式很像,不明白的同学可以去看下正则
*/
getInstance(String[])//通过一个字符数组来得到一个实例
contains(char) //是否包含字符
getCharRanges() //返回一个该CharSet所有包含的字符,返回值为CharRange[]类型
6.CharSetUtils类
CharSet的辅助类,该类包含以下方法
evaluateSet(String[] set) //返回一个CharSet类,与CharSet.getInstance(String[])函数相同
squeeze(String str,String set) //去掉str中,重复的字符(该字符由set来指定)
count(String str,String set) //计算str中,包含set中字符的个数
count(String str,String[] set) //同上
keep(String str,String set) //只保留str字符串中在set中出现的字符串
keep(String str,String[] set) //同上
delete(String str,String set) //删除str字符串中在set串中出现的字符
delete(String str,String[] set) //同上
translate(String str,String searchChars,replaceChars) //将str字符串出现在searchChars中的字符替换成replaceChars(不过这个方法已经过时了,建议使用StringUtils.replaceChars(String,String,String))