StringUtils工具類在org.apache.commons.lang.StringUtils包下,下面我將在源碼的基礎上作筆記同樣一點一點讀下去,解析下去。前端
package org.apache.commons.lang;java
import java.util.*;apache
// Referenced classes of package org.apache.commons.lang:
// ArrayUtils, ObjectUtils, CharSetUtils, StringEscapeUtils,
// WordUtils, CharUtils數組
public class StringUtils
{函數
public static final String EMPTY = "";
public static final int INDEX_NOT_FOUND = -1;
private static final int PAD_LIMIT = 8192;工具
public StringUtils()
{
}
/**
*Java中獲取長度的對應方法。
*若是是數組的話就是:數組.length屬性;
*若是是字符串的話就是:字符串.length()方法;
*若是是集合的話就是:集合.size()方法
*/
//判斷字符串爲不爲空,等於null或者長度爲0,注意:空格字符不爲空
public static boolean isEmpty(String str)
{
return str == null || str.length() == 0;
}this
//判斷字符串不爲空,不等於null而且長度不爲0,即 str != null && str.length() != 0
public static boolean isNotEmpty(String str)
{
return !isEmpty(str);
}編碼
//isEmpty方法和isBlank方法,兩個都是判斷字符串爲不爲空的,可是isEmpty方法中:WhiteSpace會定爲非空,而isBlank方法會定爲空。
public static boolean isBlank(String str)
{
int strLen;
if (str == null || (strLen = str.length()) == 0)
return true;
for (int i = 0; i < strLen; i++)
if (!Character.isWhitespace(str.charAt(i)))
return false;spa
return true;
}.net
public static boolean isNotBlank(String str)
{
return !isBlank(str);
}
/**
* @deprecated Method clean is deprecated
* clean方法被棄用了
*/
public static String clean(String str)
{
return str != null ? str.trim() : "";
}
//下面介紹到StringUtils類中的第一個攔路虎trim(),當時我看的時候也是百思不得其解,在網上找了不少資料,稍微瞭解了一下其中的原理,搞的稍微明白了一些。
比較靠譜的講解:
http://blog.csdn.net/muyu114/article/details/5734295
trim()方法在StringUtils中沒有,這個類是在String文件中才有的,下面從String類中將其摘出。
string類的trim()方法
public String trim() { //用一個很形象的說法就是:trim()是去掉一個字符串兩端的控制符,不單單是空格
int len = value.length; //字符數組的長度
int st = 0; //字符串中不爲空格的第一個字符位置,即字符串中不爲空格的字符的起始位置
char[] val = value;
while ((st < len) && (val[st] <= ' ')) { //字母的轉義字符都大於空格的轉義字符
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) { //字母的轉義字符都大於空格的轉義字符
len--; //字符串中從右邊數不爲空格的第一個字符的位置,即字符串中不爲空格的字符的結束位置
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this; //判斷是否有空格須要截取,有則截取,沒有則返回原String
}
下面是trim()函數在源碼中的註釋翻譯過來的。
\u0020在Unicode編碼中對應的是空格,\r \n都是小於\u0020。
'\r'是回車,'\n'是換行,前者使光標到行首,後者使光標下移一格。一般用的Enter是兩個加起來。
trim 也就是去掉最開始和最開頭的空白字符
public String trim()
返回字符串的副本,忽略前導空白和尾部空白。
若是此 String 對象表示一個空字符序列,或者此 String 對象表示的字符序列的第一個和最後一個字符的代碼都大於 '\u0020'(空格字符),則返回對此 String 對象的引用。
不然,若字符串中沒有代碼大於 '\u0020' 的字符,則建立並返回一個表示空字符串的新 String 對象。
不然,假定 k 爲字符串中代碼大於 '\u0020' 的第一個字符的索引,m 爲字符串中代碼大於 '\u0020' 的最後一個字符的索引。建立一個新的 String 對象,它表示此字符串中從索引 k 處的字符開始,到索引 m 處的字符結束的子字符串,即 this.substring(k, m+1) 的結果。
此方法可用於截去字符串開頭和末尾的空白(如上所述)。
返回:
此字符串移除了前導和尾部空白的副本;若是沒有前導和尾部空白,則返回此字符串。
public static String trim(String str)
{
return str != null ? str.trim() : null;
}
//trimToNull 判斷trim後的字符串是否是Empty 是的話返回null 不是的話就返回ts
public static String trimToNull(String str)
{
String ts = trim(str);
return isEmpty(ts) ? null : ts;
}
//trimToEmpty 判斷字符串等於不等於null 不等於返回trim後的字符串 等於就返回""空字符串
public static String trimToEmpty(String str)
{
return str != null ? str.trim() : "";
}
//去掉字符串兩端的空白符,若是輸入爲null,則返回null
public static String strip(String str)
{
return strip(str, null);
}
//去掉字符串兩端空白符(WhiteSpace),若是字符串是null則返回null,不是null,則返回strip(str, null)去掉兩端空白符
public static String stripToNull(String str)
{
if (str == null)
{
return null;
} else
{
str = strip(str, null);
return str.length() != 0 ? str : null;
}
}
//去掉字符串兩端的空白符,若是字符串等於null則返回""空字符串,不然返回strip(str,null)去掉兩端空白符
public static String stripToEmpty(String str)
{
return str != null ? strip(str, null) : "";
}
//去掉str兩端的在stripChars中的字符。
//在這個函數中先進行stripStart,而後再進行stripEnd,就是先去掉字符串前端的在stripChars中的字符,而後去掉字符串末端的在stripChars中的字符
/**
*一個例子
* String str = "abcde";
* 【1】String stripChars = "ace";
* StringUtils.strip(str, stripChars) = "bcd";
* 【2】String stripChars = "abd"
* StringUtils.strip(str, stripChars) = "cde"
*/
public static String strip(String str, String stripChars)
{
if (isEmpty(str))
{
return str;
} else
{
str = stripStart(str, stripChars);
return stripEnd(str, stripChars);
}
}
//去掉str前端的在stripChars中的字符。
public static String stripStart(String str, String stripChars)
{
int strLen;
//若是str == null 或者長度爲0,則返回str
if (str == null || (strLen = str.length()) == 0)
return str;
int start = 0;
if (stripChars == null)
{
for (; start != strLen && Character.isWhitespace(str.charAt(start)); start++);
//若是stripChars == null,start 記錄str中第一個不爲空白字符的字符的位置
} else
{
if (stripChars.length() == 0)
return str;
for (; start != strLen && stripChars.indexOf(str.charAt(start)) != -1; start++);
//若是stripChars != null,則start記錄str的前端不與stripChars前端字符同樣的第一個字符的位置
}
return str.substring(start);
}
//去掉str末端的在stripChars中的字符
public static String stripEnd(String str, String stripChars)
{
//參考stripStart()函數
int end;
if (str == null || (end = str.length()) == 0)
return str;
if (stripChars == null)
{
for (; end != 0 && Character.isWhitespace(str.charAt(end - 1)); end--);
} else
{
if (stripChars.length() == 0)
return str;
for (; end != 0 && stripChars.indexOf(str.charAt(end - 1)) != -1; end--);
}
return str.substring(0, end);
}
//去掉String數組strs[]先後兩端的空格
public static String[] stripAll(String strs[])
{
return stripAll(strs, null);
}
//去掉String數組strs[]先後兩端與stripChars同樣的字符
public static String[] stripAll(String strs[], String stripChars)
{
int strsLen;
if (strs == null || (strsLen = strs.length) == 0)
return strs;
String newArr[] = new String[strsLen];
for (int i = 0; i < strsLen; i++)
newArr[i] = strip(strs[i], stripChars);
return newArr; }