今天学习了 commons-lang的一些常用方法,进行了一下简单的记录。
目录
一、ArrayUtils
二、StringUtils
三、CollectionUtils
四、FileUtils
首先是下载:
我是直接用maven注入依赖,在pom.xml中加入这个
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
一、ArrayUtils
add(array, element):添加元素,在尾部追加
并不是在原数组添加,而是返回一个新的数组。
原因:有的项目很大,并不是一个人在写 ,可能同事把数组改了,还按原来的写,就会出现问题,但是项目太大了根本找不到同事在哪改了数组……emmm
String[] array1 = { "a", "b", "c", "d", "e", };
String[] array2 = (String[]) ArrayUtils.add(array1, "tom");
System.out.println(ArrayUtils.toString(array1));
System.out.println(ArrayUtils.toString(array2));
clone(array1):拷贝数组
重点:浅拷贝——>只拷贝引用
Student s1 = new Student("tom", 15);
Student s2 = new Student("nanxi", 27);
Student[] array1 = { s1, s2 };
Student[] array2 = (Student[]) ArrayUtils.clone(array1);
System.out.println(array1[0].getName());
System.out.println(array2[0].getName());
array1[0].setName("tom1");
System.out.println(array1[0].getName());
System.out.println(array2[0].getName());
subarray(array1, a, b):截取数组
从下标为a的元素(包含)开始,到下标为b的元素(不包含)结束
reverse(array1):翻转数组
无返回值,对原始数组修改。慎用!
indexOf(array1, element):从头开始查找元素
返回第一个被找到的元素的下标
没找到,返回-1
lastIndexOf(array1, element):返回元素最后出现的位置下标
没找到,返回-1
remove(array, index):移除指定位置的元素
返回新数组
removeElement(array, element):移除指定元素
返回新数组
removeElement 方法, 匹配原理 :
• 通过元素的 equals 方法判断两个元素是否匹配
• Java 中所有类继承自 Object
• Object 的 equals 方法是通过 == 实现
• 个别类型的类,重写了 equels 方法,比如 String
List 与 Array的相互转换:
List转Array :
List<Student> list = new ArrayList<Student>();
list.toArray();
Array转List:
Arrays.asList(array);
二、StringUtils
equals(s1, s2):判断两个字符串是佛相等
查看StringUtils的equals的源码,重写了equals方法,可以规避空指针问题
//查询两个字符串是否相等
String s1 = "tom";
String s2 = new String("tom");
System.out.println(StringUtils.equals(s1, s2));//可以规避空指针问题
isEmpty(s)、isBlank(s):字符串判空
isBlank()通过size判空,空格也算内容
//是否为空
String ss1 = " ";
String ss2 = null;
String ss3 = "";
System.out.println(StringUtils.isEmpty(ss1));
System.out.println(StringUtils.isBlank(ss1));//false
System.out.println(StringUtils.isEmpty(ss2));
System.out.println(StringUtils.isBlank(ss2));
System.out.println(StringUtils.isEmpty(ss3));
System.out.println(StringUtils.isBlank(ss3));
strip(s, str) stripStart(s, str) stripEnd(s, str) 移除指定字符串
Strip移除两端的str
stripStart移除开头的str
stripEnd移除结尾的str
//去头去尾
String ss = "##tom##";
System.out.println(StringUtils.strip(ss, "#"));
//去前缀
System.out.println(StringUtils.stripStart(ss, "#"));
//去后缀
System.out.println(StringUtils.stripEnd(ss, "#"));
System.out.println(StringUtils.stripEnd("abc ", null));
System.out.println(StringUtils.stripEnd(" abc ", null));//null也可以去除空格
System.out.println(StringUtils.stripStart(" abc ", null));
System.out.println(StringUtils.stripEnd(" abcyx", "xyz"));//只要是这些都会被删除,不管有几个,不管出现顺序(只删除后缀,遇见一个不是的就不是后缀了)
System.out.println(StringUtils.stripEnd(" abcyyx", "xyz"));
System.out.println(StringUtils.stripEnd("120.00", ".0"));
substringBetween(str,start,end):截取字符串,按照指定的字符串截取
//截取字符串(求子串)
String str = "abc-123-edg";
System.out.println(StringUtils.substringBetween(str, "abc", "edg"));//-123-
String str2 = "abc-123-edgabc888efg";
//截至子串中第一个出现的edg
System.out.println(StringUtils.substringBetween(str2, "abc", "edg"));//-123-
join(array, ";"):拼接字符串,按照指定的字符
//拼接字符串
String[] s11=new String[]{"ronghua","shige","shuai","ge"};
String s = StringUtils.join(s11, " ");//ronghua shige shuai ge
System.out.println(s);
String s22 = StringUtils.join(new String[] { "test", null, "", "a" },';');//test;;;a
System.out.println(s22);
三、CollectionUtils
集合的一些方法。
注入依赖:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
isEmpty(list):判断集合是否为空
List<String> list1 = new ArrayList<String>();
list1.add("a");
System.out.println(CollectionUtils.isEmpty(list1));//flase
List<String> list2 = new ArrayList<String>();
System.out.println(CollectionUtils.isEmpty(list2));//true
//判断是不是空:通过大小判断,加入null也不是空
List<String> list3 = new ArrayList<String>();
list3.add(null);
System.out.println(CollectionUtils.isEmpty(list3));//flase
List<String> list4 = new ArrayList<String>();
System.out.println(CollectionUtils.isEmpty(list4));//true
union(list1,list2):求两个集合的并集,会去重,不会再原有数组上进行更改,返回一个类型Collection为的对象。
该对象不能直接通过下标进行操作,可以强制类转。
//求并集
List<String> l1 = (List<String>) CollectionUtils.union(list5, list6);
System.out.println(CollectionUtils.union(list5, list6));//[a, A, b, c]
Object[] array = (Object[]) l1.toArray();
System.out.println(ArrayUtils.toString(array));//{a,A,b,c}
intersection(list1,list2):求两个集合的交集。返回一个Collection对象。
试了试null,也能够被算作交集元素,不会有空指针问题。
//求交集
List<String> l2 = (List<String>) CollectionUtils. intersection(list5, list6);
Object[] array1 = (Object[]) l2.toArray();
System.out.println(ArrayUtils.toString(array1));//{b,c}
list6.set(2,null);
list5.set(2,null);
List<String> l3 = (List<String>) CollectionUtils. intersection(list5, list6);
Object[] array2 = (Object[]) l3.toArray();
System.out.println(ArrayUtils.toString(array2));//{<null>,b}
copy(list2, list1):拷贝list1的元素到list2
该方法为浅拷贝(只拷贝引用不会在内存中重新创建一个对象),并且list2的size必须大于等于list1
Student stu1 = new Student("tom1", "15","male");
Student stu2 = new Student("tom2", "14","male");
Student stu3 = new Student("tom3", "13","male");
Student stu4 = new Student("tom4", "12","male");
//复制
List<Student> list8 = new ArrayList<Student>();
list8.add(stu1);
List<Student> list9 = new ArrayList<Student>();
list9.add(stu2);
list9.add(stu3);
//把8复制到9,要求目的数组要比源数组长
Collections.copy(list9, list8);
for (Student student : list9) {
System.out.print(student.getName()+" ");//tom1 tom3
}
System.out.println();
stu1.setName("lily");
for (Student student : list9) {
System.out.print(student.getName()+" ");//lily tom3
}
System.out.println();
sort(list, comparator):list排序,需要自定义比较器。
该方法比较重要。
//排序
List<Student> list7 = new ArrayList<Student>();
list7.add(stu1);
list7.add(stu2);
list7.add(stu3);
list7.add(stu4);
Collections.sort(list7, new StudentComparator());
for (int i = 0; i < list7.size(); i++) {
Student stu = list7.get(i);
System.out.print(stu.getName()+" ");//tom4 tom3 tom2 lily
}
System.out.println();
自定义的比较器:比较器应该有三个返回值 1、-1和0;如果返回1,sort方法会改变集合中数据的顺序。否则不然。
import java.util.Comparator;
public class StudentComparator implements Comparator<Student> {
public int compare(Student o1, Student o2) {
Integer age1 = Integer.parseInt(o1.getAge());
Integer age2 = Integer.parseInt(o2.getAge());
if (age1 == age2) {
return 0;
} else if (age1 > age2) {
return 1;
} else {
return -1;
}
}
}
被比较的类定义:
public class Student {
private String name;
private String age;
private String sex;
public Student(String name, String age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
四、FileUtils
注入依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
deleteDirectory(file):删除文件夹
不存在不报错 不是文件夹,会报错;
//删除文件夹
//不存在不报错
//不是文件夹,会报错;
File file2 = new File("e:/testFile/t8");//不存在
FileUtils.deleteDirectory(file2);
File file1 = new File("e:/testFile/t1/t1.txt");//非文件夹
FileUtils.deleteDirectory(file1);
deleteQuietly(file):删除文件夹、文件
不存在,返回false
File file1 = new File("e:/testFile/t8/t1.txt");//不存在
System.out.println(FileUtils.deleteQuietly(file1));
File file2 = new File("e:/testFile/t3");//非文件
System.out.println(FileUtils.deleteQuietly(file2));
File file3 = new File("e:/testFile/t1/t1.txt");//存在
System.out.println(FileUtils.deleteQuietly(file3));
cleanDirectory(file):清空文件夹
不存在,报错
非文件夹,报错
copyFileToDirectory(file,file):将文件拷贝到指定目录
目录不存在,创建