commons-lang3-3.2.jar中的經常使用工具類的使用html
<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> </dependency>
能夠判斷是不是空串,是否爲null,默認值設置等操做:java
/**
* StringUtils
*/
public static void test1() {
System.out.println(StringUtils.isBlank(" "));// true----能夠驗證null, ""," "等
System.out.println(StringUtils.isBlank("null"));// false
System.out.println(StringUtils.isAllLowerCase("null"));// t
System.out.println(StringUtils.isAllUpperCase("XXXXXX"));// t
System.out.println(StringUtils.isEmpty(" "));// f---爲null或者""返回true
System.out.println(StringUtils.defaultIfEmpty(null, "default"));// 第二個參數是第一個爲null或者""的時候的取值
System.out.println(StringUtils.defaultIfBlank(" ", "default"));//// 第二個參數是第一個爲null或者""或者" "的時候的取值
}
isBlank() 能夠驗證空格、null、"",若是是好幾個空格也返回truegit
isEmpty驗證不了空格,只有值爲null和""返回true sql
二者都驗證不了"null"字符串,因此若是驗證"null"還須要本身用equals進行驗證。apache
結果:數組
true
false
true
true
false
default
defaultapp
簡單的貼出幾個源碼便於記錄:ide
public static boolean isBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (Character.isWhitespace(cs.charAt(i)) == false) {
return false;
}
}
return true;
}
public static boolean isEmpty(final CharSequence cs) {
return cs == null || cs.length() == 0;
}
public static String defaultIfEmpty(String str, String defaultStr) {
return StringUtils.isEmpty(str) ? defaultStr : str;
}
CharSequence是一個接口,String,StringBuffer,StringBuilder等都實現了此接口工具
public abstract interface CharSequence {
public abstract int length();
public abstract char charAt(int paramInt);
public abstract CharSequence subSequence(int paramInt1, int paramInt2);
public abstract String toString();
}
補充:StringUtils頁能夠將集合轉爲String,而且以指定符號連接裏面的數據ui
List list = new ArrayList(2);
list.add("張三");
list.add("李四");
list.add("王五");
String list2str = StringUtils.join(list, ",");
System.out.println(list2str);
結果:
張三,李四,王五
補充:有時候咱們但願給拼接後的字符串都加上單引號,這個在拼接SQL in條件的時候很是有用,例如:
//需求:將逗號裏面的內容都加上單引號
String string = "111,222,333";
string = "'"+string+"'";//字符串先後加'
string = StringUtils.join(string.split(","),"','");//先按逗號分隔爲數組,而後用','鏈接數組
System.out.println(string);
結果:
'111','222','333'
補充:null和字符串"null"的區別
null在JVM中沒有分配內存,引用中無任何東西,debug也看不到任何東西,"null"字符串是一個正常的字符串,在JVM分配內存並且能夠看到東西
"null"字符串有東西
null無任何東西:
補充:String.format(format,Object)也能夠對字符串進行格式化,例如在數字前面補齊數字
int num = 50;
String format = String.format("%0" + 5 + "d", num);
System.out.println(format);
結果:
00050
補充:StringUtils也能夠截取字符串,判斷是否大小寫等操做
String string = "123_45_43_ss";
System.out.println(StringUtils.isAllLowerCase(string));// 判斷所有小寫
System.out.println(StringUtils.isAllUpperCase(string));// 判斷所有大寫
System.out.println(StringUtils.substringAfter(string, "123"));// 截取123以後的
System.out.println(StringUtils.substringBefore(string, "45"));// 截取45以前的
System.out.println(StringUtils.substringBefore(string, "_"));// 截取第一個_以前的
System.out.println(StringUtils.substringBeforeLast(string, "_"));// 截取最後一個_以前的
System.out.println(StringUtils.substringAfter(string, "_"));// 截取第一個_以後的
System.out.println(StringUtils.substringAfterLast(string, "_"));// 截取最後一個_以後的
System.out.println(StringUtils.substringBetween("1234565432123456", "2", "6"));// 截取兩個之間的(都找的是第一個)
結果:
false
false
_45_43_ss
123_
123
123_45_43
45_43_ss
ss
345
補充:StringUtils也能夠將字符串分割爲數組
package cn.xm.exam.test;
import org.apache.commons.lang.StringUtils;
public class test {
public static void main(String[] args) {
String t = "tttt";
System.out.println(StringUtils.split(t, ","));
}
}
結果:
[Ljava.lang.String;@5a24389c
看過深刻理解JVM的都知道上面的[表明是一維數組類型,L表明是引用類型,後面的是String類型
補充: isNoneBlank能夠支持多個參數,甚至String數組,用來判斷數組裏的每個字符串都是isNotBlank的。
補充:StringUtils能夠獲取指定字符出現的次數
StringUtils.countMatches(str, ":")
補充:StringUtils能夠第N次某字符串出現的位置
StringUtils.ordinalIndexOf(str, ":", 2)
補充:StringUtils能夠獲取指定字符串之間的字符串,並自動截取爲字符串數組
String[] substringBetweens = StringUtils.substringsBetween(str, ":", ":");
補充:StringUtils能夠獲取指定字符串之間的字符串(只取知足條件的前兩個)
StringUtils.substringBetween(str2, "/")
更全的用法參考:https://blog.csdn.net/anita9999/article/details/82346552
/**
* StringEscapeUtils
*/
public static void test2(){
//1.防止sql注入------原理是將'替換爲''
System.out.println(org.apache.commons.lang.StringEscapeUtils.escapeSql("sss"));
//2.轉義/反轉義html
System.out.println( org.apache.commons.lang.StringEscapeUtils.escapeHtml("<a>dddd</a>")); //<a>dddd</a>
System.out.println(org.apache.commons.lang.StringEscapeUtils.unescapeHtml("<a>dddd</a>")); //<a>dddd</a>
//3.轉義/反轉義JS
System.out.println(org.apache.commons.lang.StringEscapeUtils.escapeJavaScript("<script>alert('1111')</script>"));
//4.把字符串轉爲unicode編碼
System.out.println(org.apache.commons.lang.StringEscapeUtils.escapeJava("中國"));
System.out.println(org.apache.commons.lang.StringEscapeUtils.unescapeJava("\u4E2D\u56FD"));
//5.轉義JSON
System.out.println(org.apache.commons.lang3.StringEscapeUtils.escapeJson("{name:'qlq'}"));
}
/**
* NumberUtils
*/
public static void test3(){
System.out.println(NumberUtils.isNumber("231232.8"));//true---判斷是不是數字
System.out.println(NumberUtils.isDigits("2312332.5"));//false,判斷是不是整數
System.out.println(NumberUtils.toDouble(null));//若是傳的值不正確返回一個默認值,字符串轉double,傳的不正確會返回默認值
System.out.println(NumberUtils.createBigDecimal("333333"));//字符串轉bigdecimal
}
/**
* BooleanUtils
*/
public static void test4(){
System.out.println(BooleanUtils.isFalse(true));//false
System.out.println(BooleanUtils.toBoolean("yes"));//true
System.out.println(BooleanUtils.toBooleanObject(0));//false
System.out.println(BooleanUtils.toStringYesNo(false));//no
System.out.println(BooleanUtils.toBooleanObject("ok", "ok", "error", "null"));//true-----第一個參數是須要驗證的字符串,第二個是返回true的值,第三個是返回false的值,第四個是返回null的值
}
/**
* SystemUtils
*/
public static void test5(){
System.out.println(SystemUtils.getJavaHome());
System.out.println(SystemUtils.getJavaIoTmpDir());
System.out.println(SystemUtils.getUserDir());
System.out.println(SystemUtils.getUserHome());
System.out.println(SystemUtils.JAVA_VERSION);
System.out.println(SystemUtils.OS_NAME);
System.out.println(SystemUtils.USER_TIMEZONE);
}
DateUtils也能夠判斷是不是同一天等操做。
package zd.dms.test;
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
public class PlainTest {
public static void main(String[] args) {
// DateFormatUtils----date轉字符串
Date date = new Date();
System.out.println(DateFormatUtils.format(date, "yyyy-MM-dd hh:mm:ss"));// 小寫的是12小時制
System.out.println(DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));// 大寫的HH是24小時制
// DateUtils ---加減指定的天數(也能夠加減秒、小時等操做)
Date addDays = DateUtils.addDays(date, 2);
System.out.println(DateFormatUtils.format(addDays, "yyyy-MM-dd HH:mm:ss"));
Date addDays2 = DateUtils.addDays(date, -2);
System.out.println(DateFormatUtils.format(addDays2, "yyyy-MM-dd HH:mm:ss"));
// 原生日期判斷日期前後順序
System.out.println(addDays2.after(addDays));
System.out.println(addDays2.before(addDays));
// DateUtils---字符串轉date
String strDate = "2018-11-01 19:23:44";
try {
Date parseDateStrictly = DateUtils.parseDateStrictly(strDate, "yyyy-MM-dd HH:mm:ss");
Date parseDate = DateUtils.parseDate(strDate, "yyyy-MM-dd HH:mm:ss");
System.out.println(parseDateStrictly);
System.out.println(parseDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
結果:
2018-11-02 07:53:50
2018-11-02 19:53:50
2018-11-04 19:53:50
2018-10-31 19:53:50
false
true
Thu Nov 01 19:23:44 CST 2018
Thu Nov 01 19:23:44 CST 2018
package cn.xm.exam.test;
import org.apache.commons.lang.time.StopWatch;
public class test implements AInterface, BInterface {
public static void main(String[] args) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
stopWatch.stop();
System.out.println(stopWatch.getStartTime());// 獲取開始時間
System.out.println(stopWatch.getTime());// 獲取總的執行時間--單位是毫秒
}
}
結果:
1541754863180
5001
IntRange intRange = new IntRange(1, 5);
System.out.println(intRange.getMaximumInteger());
System.out.println(intRange.getMinimumInteger());
System.out.println(intRange.containsInteger(6));
System.out.println(intRange.containsDouble(3));
結果:
5
1
false
true
package cn.xm.exam.test;
import org.apache.commons.lang.ArrayUtils;
public class test implements AInterface, BInterface {
public static void main(String[] args) {
int array[] = { 1, 5, 5, 7 };
System.out.println(array);
// 增長元素
array = ArrayUtils.add(array, 9);
System.out.println(ArrayUtils.toString(array));
// 刪除元素
array = ArrayUtils.remove(array, 3);
System.out.println(ArrayUtils.toString(array));
// 反轉數組
ArrayUtils.reverse(array);
System.out.println(ArrayUtils.toString(array));
// 查詢數組索引
System.out.println(ArrayUtils.indexOf(array, 5));
// 判斷數組中是否包含指定值
System.out.println(ArrayUtils.contains(array, 5));
// 合併數組
array = ArrayUtils.addAll(array, new int[] { 1, 5, 6 });
System.out.println(ArrayUtils.toString(array));
}
}
結果:
[I@3cf5b814
{1,5,5,7,9}
{1,5,5,9}
{9,5,5,1}
1
true
{9,5,5,1,1,5,6}
補充:ArrayUtils能夠將包裝類型的數組轉變爲基本類型的數組。
package cn.xm.exam.test;
import org.apache.commons.lang.ArrayUtils;
public class test {
public static void main(String[] args) {
Integer integer[] = new Integer[] { 0, 1, 2 };
System.out.println(integer.getClass());
int[] primitive = ArrayUtils.toPrimitive(integer);
System.out.println(primitive.getClass());
}
}
結果:
class [Ljava.lang.Integer;
class [I
看過JVM的知道上面第一個表明是包裝類型一維數組,並且是Integer包裝類。L表明引用類型,[表明一維。
第二個表明是基本數據類型int類型的一維數組。
補充:ArrayUtils也能夠判斷數組是否爲null或者數組大小是否爲0
/**
* <p>Checks if an array of Objects is empty or <code>null</code>.</p>
*
* @param array the array to test
* @return <code>true</code> if the array is empty or <code>null</code>
* @since 2.1
*/
public static boolean isEmpty(Object[] array) {
return array == null || array.length == 0;
}
一個普通的java:
package cn.xm.exam.test.p1;
public class Person {
private String name;
public static void staticMet(String t) {
System.out.println(t);
}
public Person(String name) {
this.name = name;
}
public String call(String string) {
System.out.println(name);
System.out.println(string);
return string;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "test [name=" + name + "]";
}
}
反射工具類操做:
package cn.xm.exam.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.lang.reflect.ConstructorUtils;
import org.apache.commons.lang.reflect.FieldUtils;
import org.apache.commons.lang.reflect.MethodUtils;
import cn.xm.exam.test.p1.Person;
public class test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
// ConstructorUtils工具類的使用
Constructor accessibleConstructor = ConstructorUtils.getAccessibleConstructor(Person.class, String.class);
Person newInstance = (Person) accessibleConstructor.newInstance("test");
System.out.println(newInstance.getClass());
System.out.println(newInstance);
// MethodUtils的使用
Method accessibleMethod = MethodUtils.getAccessibleMethod(Person.class, "call", String.class);
Object invoke = accessibleMethod.invoke(newInstance, "參數");
System.out.println(invoke);
// 調用靜態方法
MethodUtils.invokeStaticMethod(Person.class, "staticMet", "靜態方法");
// FieldUtils 暴力獲取私有變量(第三個參數表示是否強制獲取)---反射方法修改元素的值
Field field = FieldUtils.getField(Person.class, "name", true);
field.setAccessible(true);
System.out.println(field.getType());
field.set(newInstance, "修改後的值");
System.out.println(newInstance.getName());
}
}
結果:
class cn.xm.exam.test.p1.Person
test [name=test]
test
參數
參數
靜態方法
class java.lang.String
修改後的值
例如:
EqualsBuilder equalsBuilder = new EqualsBuilder();
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
String string1 = "111";
String string2 = "111";
equalsBuilder.append(integer1, integer2);
equalsBuilder.append(string1, string2);
System.out.println(equalsBuilder.isEquals());
結果:
true
查看源碼:(append的時候判斷兩個元素是否相等,若是equals已經等於false就直接返回)
/**
* <p>Test if two <code>Object</code>s are equal using their
* <code>equals</code> method.</p>
*
* @param lhs the left hand object
* @param rhs the right hand object
* @return EqualsBuilder - used to chain calls.
*/
public EqualsBuilder append(Object lhs, Object rhs) {
if (isEquals == false) {
return this;
}
if (lhs == rhs) {
return this;
}
if (lhs == null || rhs == null) {
this.setEquals(false);
return this;
}
Class lhsClass = lhs.getClass();
if (!lhsClass.isArray()) {
// The simple case, not an array, just test the element
isEquals = lhs.equals(rhs);
} else if (lhs.getClass() != rhs.getClass()) {
// Here when we compare different dimensions, for example: a boolean[][] to a boolean[]
this.setEquals(false);
}
// 'Switch' on type of array, to dispatch to the correct handler
// This handles multi dimensional arrays of the same depth
else if (lhs instanceof long[]) {
append((long[]) lhs, (long[]) rhs);
} else if (lhs instanceof int[]) {
append((int[]) lhs, (int[]) rhs);
} else if (lhs instanceof short[]) {
append((short[]) lhs, (short[]) rhs);
} else if (lhs instanceof char[]) {
append((char[]) lhs, (char[]) rhs);
} else if (lhs instanceof byte[]) {
append((byte[]) lhs, (byte[]) rhs);
} else if (lhs instanceof double[]) {
append((double[]) lhs, (double[]) rhs);
} else if (lhs instanceof float[]) {
append((float[]) lhs, (float[]) rhs);
} else if (lhs instanceof boolean[]) {
append((boolean[]) lhs, (boolean[]) rhs);
} else {
// Not an array of primitives
append((Object[]) lhs, (Object[]) rhs);
}
return this;
}
轉載自: