2014年1月22日—日记 commons lang 包的学习心得

时间:2022-01-23 14:12:26

    CompareToBuilder – 用于辅助实现Comparable.compareTo(Object)方法;
    EqualsBuilder – 用于辅助实现Object.equals()方法;
    HashCodeBuilder – 用于辅助实现Object.hashCode()方法;
    ReflectionToStringBuilder – 使用反射机制辅助实现Object.toString()方法;
    ToStringBuilder – 用于辅助实现Object.toString()方法;
    StandardToStringStyle – 辅助ToStringBuilder控制标准格式;
    ToStringStyle – 辅助ToStringBuilder控制输出格式。


1. 两个对象相等,必须产生相同的hashcode,但是两个对象有相同的hashcode,并不一定相同。

2.EqualsBuilder 用于对象的比较:

 public boolean equals(Object obj)
{
// TODO Auto-generated method stub
if (obj == null) return false;
if (!(obj instanceof Dog)) return false;
Dog dog = (Dog) obj;
return new EqualsBuilder().append(getName(), dog.getName()).isEquals();

}


append方法通过判断传入的参数是否相同来改变EqualsBuilder对象的isEquals的值。



3. EqualsBuilder还有一个通过java反射来比较,使用了java 的递归,方法名称为  refelectionEquals(obj,obj)。


4.HashCodeBuilder  用于生成hashcode,一般在复写object类的hashcode()方法的时候使用,如:

 @Override
public int hashCode()
{
// TODO Auto-generated method stub
return new HashCodeBuilder().append(getName()).toHashCode();
}

5.AccessibleObject 最常用的方法为AccessibleObject.setAccessible(obj,true),用于改变这个对象的的所有的field的访问权限。


6.apache的ArrayUtils类 关于对数组的操作,

       isEmpty(array)    判断某一个数组是否为空

       isNotEmpty(array)  是否不为空  !isEmpty(array);

       asCollection(String commaDelim)  将有分隔符的字符串转换成Collection

7.CompareToBuilder  用于对象的比较,通常该对象实现comparable接口,实现compareTo方法,例如:

    public int compareTo(Object o)
{
// TODO Auto-generated method stub
return new CompareToBuilder().append(getId(), ((Dog) o).getId()).toComparison();
}

8.ReflectionToStringBuilder ReflectionToStringBuilder类是用来实现类中的toString()方法的类,它采用Java反射机制(Reflection),
通过reflection包中的AccessibleObject类绕过访问控制而直接存取对象的私有成员。因此在使用该类时,要注意运行环境的安全策略。

 

    @Override
public String toString()
{
// TODO Auto-generated method stub
return ReflectionToStringBuilder.toString(this);
}
9. 这里需要补充一点,对于ToStringStyle类,代码中已经内置了5种,分别为ToStringStyle.DEFAULT_STYLE、ToStringStyle.MULTI_LINE_STYLE、ToStringStyle.NO_FIELD_NAMES_STYLE、ToStringStyle.SHORT_PREFIX_STYLE、ToStringStyle.SIMPLE_STYLE。不知道为什么,这5种内置类的实现都被定义成了private static final类了。所以如果上述5种类不能满足你的要求的话,想继承他们是不可能的。所以你需要创建StandardToStringStyle一个实例,然后调用它的方法来实现自定义的格式。在StandardToStringStyle的单元测试代码中,是这样调用的:

    private static final StandardToStringStyle STYLE = new StandardToStringStyle();

static {
STYLE.setUseShortClassName(true);
STYLE.setUseIdentityHashCode(false);
STYLE.setArrayStart("[");
STYLE.setArraySeparator(", ");
STYLE.setArrayEnd("]");
STYLE.setNullText("%NULL%");
STYLE.setSizeStartText("%SIZE=");
STYLE.setSizeEndText("%");
STYLE.setSummaryObjectStartText("%");
STYLE.setSummaryObjectEndText("%");
}
10.SynchronizedList  ArrayList  和Vector

11. StringUtils的replace方法,提供可以全部替换该字符串中的字符

  String after = StringUtils.replace(StringUtils.replace(result, "\"checked\":\"true\"", "\"checked\":true",
-1),
"\"checked\":\"false\"", "\"checked\":false", -1);
System.out.println(result);
System.out.println(after);


12.ArrayUtils类方法的学习

        toMap(Object[] obj)   将一个二维数组转换成Map对象。

        toObject(int[] array) 将所有的数组包装成对象类型。

         toPrimitive(Integer[] array) 将所有的包装类型拆箱成原始类型。

       remove(Object[],int index) 移除指定下标的元素

       removeElement(Object[],Object element) 移除指定元素


13.NumberUtils  数字操作类

     

 // 判断字符串是否为整数  
NumberUtils.isDigits(str);

// 判断字符串是否为数字
NumberUtils.isNumber(str);

// 获取参数中最大的值,支持传入数组
NumberUtils.max(10, 20, 30);

// 获取参数中最小的值,支持传入数组
NumberUtils.min(10, 20, 30);

// 将字符串转换为int类型,支持float,long,short等数值类型
NumberUtils.toInt(str);

// 通过字符串创建BigDecimal类型 ,支持int,float,long等数值
NumberUtils.createBigDecimal(str);



14.RandomUtils  随机数操作,可以得到boolean值 long值  double值

  RandomUtils.nextBoolean();  
RandomUtils.nextDouble();
RandomUtils.nextLong();
// 注意这里传入的参数不是随机种子,而是在0~1000之间产生一位随机数
RandomUtils.nextInt(1000);

15.StringUtils  字符串操作类


   

 String str = "Hello World";  
/*
* 由于StringUtils拥有100+的方法,笔者不逐一列举用法,
* 只列举笔者认为常用的或笔者使用过的
*/

// isEmpty和isBlank的区别在于isEmpty不会忽略空格,
// " "<--对于这样的字符串isEmpty会认为不是空,
// 而isBlank会认为是空,isBlank更常用
StringUtils.isEmpty(str);
StringUtils.isNotEmpty(str);
StringUtils.isBlank(str);
StringUtils.isNotBlank(str);


// strip --> 去除两端的aa
// stripStart --> 去除开始位置的hell
// stripEnd --> 去除结尾位置的orld
StringUtils.strip(str, "aa");
StringUtils.stripStart(str, "hell");
StringUtils.stripEnd(str, "orld");


// 返回字符串在第三次出现A的位置
StringUtils.ordinalIndexOf(str, "A", 3);


// 获取str 开始为hello结尾为orld中间的字符串
// 注意此方法返回字符串 -->substringBetween
// 注意此方法返回字符串数组(多了个s) --> substringsBetween
StringUtils.substringBetween(str, "hell", "orld");
StringUtils.substringsBetween(str, "hell", "orld");


// 重复字符串,第二种重载形式为在重复中用hahah拼接
StringUtils.repeat(str, 3);
StringUtils.repeat(str, "hahah", 2);


// 统计参数2在字符串中出现的次数
StringUtils.countMatches(str, "l");


// 判断字符串是否全小写或大写
StringUtils.isAllLowerCase(str);
StringUtils.isAllUpperCase(str);


// isAlpha --> 全部由字母组成返回true
// isNumeric -->全部由数字组成返回true
// isAlphanumeric -->全部由字母或数字组成返回true
// isAlphaSpace -->全部由字母或空格组成返回true
// isWhitespace -->全部由空格组成返回true
StringUtils.isAlpha(str);
StringUtils.isNumeric(str);
StringUtils.isAlphanumeric(str);
StringUtils.isAlphaSpace(str);
StringUtils.isWhitespace(str);


// 缩进字符串,第二参数最低为 4,要包含...
// 现在Hello World输出为H...
StringUtils.abbreviate(str, 4);


// 首字母大写或小写
StringUtils.capitalize(str);
StringUtils.uncapitalize(str);


// 将字符串数组转变为一个字符串,通过","拼接,支持传入iterator和collection
StringUtils.join(new String[] { "Hello", "World" }, ",");