1. 程式人生 > >Spring中Utils的使用系列(一):StringUtils

Spring中Utils的使用系列(一):StringUtils

在Spring中,有非常多Utils工具類,這些工具類有的是為了開發者使用的,有的只是提供給Spring框架使用的。瞭解這些工具類,在適當的時候使用這些工具類,對我們平時的開發還是很有幫助的,能極大方便我們的開發。

Spring的工具類都是以Utils結尾,所以要檢視這些工具類,只需要在API文件中查詢所有*Utils即可,可以看到有多達幾十個。在後面的幾篇文章中我會選擇幾個常用的Utils,給大家展示一下Spring中的工具類的有用和常用方法。

原文地址

 

更多詳細內容請閱讀原文!

Boolean

屬於該組的方法都是在對字串進行一些判定操作:

1

2
3
4
5
6
// boolean isEmpty(Object str):字串是否為空或者空字串:""
// boolean hasLength(CharSequence str):字串是否為空,或者長度為0
// boolean hasText(String str):字串是否有內容(不為空,且不全為空格)
assertFalse(StringUtils.hasText(" "));
// boolean containsWhitespace(String str):字串是否包含空格
assertTrue(StringUtils.containsWhitespace("a b"));

字串頭尾操作

屬於該類別的方法,都是對字串前,或者字串後的內容進行判定或者操作;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//字串頭尾操作
// String trimWhitespace(String str):去掉字串前後的空格
assertEquals("abc", StringUtils.trimWhitespace(" abc "));
// String trimAllWhitespace(String str):去掉字串中所有的空格
assertEquals("abc", StringUtils.trimAllWhitespace(" a b c "
));

// String trimLeadingWhitespace(String str):去掉字串開頭的空格
// String trimTrailingWhitespace(String str):去掉字串結束的空格

// String trimLeadingCharacter(String str, char leadingCharacter):去掉字串開頭的指定字元;
// String trimTrailingCharacter(String str, char trailingCharacter):去掉字串結尾的指定字元;

// boolean startsWithIgnoreCase(String str, String prefix):
// 判斷字串是否以指定字串開頭,忽略大小寫
assertTrue(StringUtils.startsWithIgnoreCase("abcd", "AB"));
// boolean endsWithIgnoreCase(String str, String suffix):
// 判斷字串是否以指定字串結尾,忽略大小寫

檔案路徑名稱相關操作

檔案路徑名稱相關操作,是針對檔名,檔案路徑,檔案字尾等常見檔案操作中需要用到的方法進行封裝;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// String unqualify(String qualifiedName):
// 得到以.分割的最後一個值,可以非常方便的獲取類似類名或者檔案字尾
assertEquals("java", StringUtils.unqualify("cn.wolfcode.java"));
assertEquals("java", StringUtils.unqualify("cn/wolfcode/Hello.java"));

// String unqualify(String qualifiedName, char separator):
// 得到以給定字元分割的最後一個值,可以非常方便的獲取類似檔名
assertEquals("Hello.java", StringUtils
.unqualify("cn/wolfcode/Hello.java", File.separatorChar));

// String capitalize(String str):首字母大寫
assertEquals("Wolfcode", StringUtils.capitalize("wolfcode"));

// String uncapitalize(String str):取消首字母大寫
assertEquals("java", StringUtils.uncapitalize("Java"));

// String getFilename(String path):獲取檔名,就不需要再使用FilenameUtils
assertEquals("myfile.txt",
StringUtils.getFilename("mypath/myfile.txt"));

// String getFilenameExtension(String path):獲取檔案字尾名
assertEquals("txt",
StringUtils.getFilenameExtension("mypath/myfile.txt"));

// String stripFilenameExtension(String path):擷取掉檔案路徑字尾
assertEquals("mypath/myfile",
StringUtils.stripFilenameExtension("mypath/myfile.txt"));

// String applyRelativePath(String path, String relativePath):
// 找到給定的檔案,和另一個相對路徑的檔案,返回第二個檔案的全路徑
// 列印:d:/java/wolfcode/other/Some.java
System.out.println(StringUtils.applyRelativePath(
"d:/java/wolfcode/Test.java", "other/Some.java"));
// 但是不支援重新定位絕對路徑和上級目錄等複雜一些的相對路徑寫法:
// 仍然列印:d:/java/wolfcode/../other/Some.java
System.out.println(StringUtils.applyRelativePath(
"d:/java/wolfcode/Test.java", "../other/Some.java"));

// String cleanPath(String path):
// 清理檔案路徑,這個方法配合applyRelativePath就可以計算一些簡單的相對路徑了
// 列印:d:/java/other/Some.java
System.out.println(
StringUtils.cleanPath("d:/java/wolfcode/../other/Some.java"));
// 需求:獲取d:/java/wolfcode/Test.java相對路徑為../../other/Some.java的檔案全路徑:
// 列印:d:/other/Some.java
System.out.println(StringUtils.cleanPath(StringUtils.applyRelativePath(
"d:/java/wolfcode/Test.java", "../../other/Some.java")));

// boolean pathEquals(String path1, String path2):
// 判斷兩個檔案路徑是否相同,會先執行cleanPath之後再比較
assertTrue(StringUtils.pathEquals("d:/wolfcode.txt",
"d:/somefile/../wolfcode.txt"))

字串和子串的操作

該組方法中主要是提供了字串和字串子串的操作,比如子串的匹配,子串的替換;子串的刪除等等操作;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// boolean substringMatch(CharSequence str, int index, CharSequence
// substring):判斷從指定索引開始,是否匹配子字串
assertTrue(StringUtils.substringMatch("aabbccdd", 1, "abb"));

// int countOccurrencesOf(String str, String sub):判斷子字串在字串中出現的次數
assertEquals(4, StringUtils.countOccurrencesOf("ababaabab", "ab"));

// String replace(String inString, String oldPattern, String
// newPattern):在字串中使用子字串替換
assertEquals("cdcdacdcd", StringUtils.replace("ababaabab", "ab", "cd"));

// String delete(String inString, String pattern):刪除所有匹配的子字串;
assertEquals("a", StringUtils.delete("ababaabab", "ab"));

// String deleteAny(String inString, String charsToDelete):刪除子字串中任意出現的字元
assertEquals("", StringUtils.deleteAny("ababaabab", "bar"));

// String quote(String str) :在字串前後增加單引號,比較適合在日誌時候使用;
assertEquals("'hello'", StringUtils.quote("hello"));

本地化相關

和Locale相關的一些字串操作;

1
2
3
4
5
6
7
8
// Locale parseLocaleString(String localeString):
// 從本地化字串中解析出本地化資訊,相當於Locale.toString()的逆向方法
assertEquals(Locale.CHINA, StringUtils.parseLocaleString("zh_CN"));

// String toLanguageTag(Locale locale):把Locale轉化成HTTP中Accept-Language能接受的本地化標準;
// 比如標準的本地化字串為:zh_CN,更改為zh-CN
System.out.println(StringUtils
.toLanguageTag(StringUtils.parseLocaleString("zh_CN")));

字串和Properties

把字串和Properties物件之間的相互轉化抽取出的一些常用方法;

1
2
3
4
5
6
7
8
9
//Properties splitArrayElementsIntoProperties(String[] array, String delimiter):
// 把字串陣列中的每一個字串按照給定的分隔符裝配到一個Properties中
String[] strs=new String[]{"key:value","key2:中文"};
Properties ps=StringUtils.splitArrayElementsIntoProperties(strs, ":");
//列印輸出:{key=value, key2=中文}
System.out.println(ps);

//Properties splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete)
//把字串陣列中的每一個字串按照給定的分隔符裝配到一個Properties中,並刪除指定字串,比如括號之類的;

字串和陣列之間的基本操作

該組方法主要是完成字串和字串陣列之間的基本操作,比如追加,刪除,排序等;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// String[] addStringToArray(String[] array, String str):把一個字串新增到一個字串陣列中
// 列印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils
.addStringToArray(new String[] { "a", "b", "c" }, "d")));

// String[] concatenateStringArrays(String[] array1, String[]array2):連線兩個字串陣列
//列印:[a, b, c, a, b, c]
System.out.println(Arrays.toString(StringUtils.concatenateStringArrays(
new String[] { "a", "b", "c" },
new String[] { "a", "b", "c","d" })));

//String[] mergeStringArrays(String[] array1, String[] array2):連線兩個字串陣列,去掉重複元素
//列印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils.mergeStringArrays(
new String[] { "a", "b", "c" },
new String[] { "a", "b", "c","d" })));

//String[] sortStringArray(String[] array):字串陣列排序
//列印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils.sortStringArray(new String[]{"d","c","b","a"})));

//String[] toStringArray(Collection<String> collection):把字串集合變成字串陣列
//String[] toStringArray(Enumeration<String> enumeration):把字串列舉型別變成字串陣列
//String[] trimArrayElements(String[] array):把字串陣列中所有字串執行trim功能;
//String[] removeDuplicateStrings(String[] array):去掉給定字串陣列中重複的元素,能保持原順序;

字串和陣列的更多方法

在該組方法中,提供了更多字串和陣列的方法,主要涉及到字串陣列的合併,字串的按規則拆分,字串和集合之間的相互轉化等操作;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//String[] split(String toSplit, String delimiter):按照指定字串分割字串;
assertArrayEquals(new String[]{"wolfcode","cn"}, StringUtils.split("wolfcode.cn", "."));
//只分割第一次,列印:[www, wolfcode.cn]
System.out.println(Arrays.toString(StringUtils.split("www.wolfcode.cn", ".")));


//String[] tokenizeToStringArray(String str, String delimiters)
//會對每一個元素執行trim操作,並去掉空字串
//使用的是StringTokenizer完成,
//列印[b, c, d]
System.out.println(Arrays.toString(StringUtils.tokenizeToStringArray("aa,ba,ca,da", "a,")));
//String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens)
//後面兩個引數在限定是否對每一個元素執行trim操作,是否去掉空字串

//String[] delimitedListToStringArray(String str, String delimiter):分割字串,會把delimiter作為整體分隔符
//列印:[a, b, c, da]
System.out.println(Arrays.toString(StringUtils.delimitedListToStringArray("aa,ba,ca,da", "a,")));
//String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete)
//分割字串,會把delimiter作為整體分隔符,增加一個要從分割字串中刪除的字元;

//String[] commaDelimitedListToStringArray(String str):使用逗號分割字串
//是delimitedListToStringArray(str, ",")的簡單方法

//Set<String> commaDelimitedListToSet(String str):使用逗號分割字串,並放到set中去重
//使用LinkedHashSet;

//String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix)
//將一個集合中的元素,使用字首,字尾,分隔符拼裝一個字串,字首後後綴是針對每一個字串的
String[] arrs=new String[]{"aa","bb","cc","dd"};
assertEquals("{aa},{bb},{cc},{dd}", StringUtils.collectionToDelimitedString(Arrays.asList(arrs),",","{","}"));

//String collectionToDelimitedString(Collection<?> coll, String delim):集合變成指定字串連線的字串;
//是collectionToDelimitedString(coll, delim, "", "")的簡寫;
//String collectionToCommaDelimitedString(Collection<?> coll):集合變成逗號連線的字串;
//是collectionToDelimitedString(coll, ",");的簡寫;

//String arrayToDelimitedString(Object[] arr, String delim):陣列使用指定字串連線;
//String arrayToCommaDelimitedString(Object[] arr):使用逗號連線陣列,拼成字串;

在Spring中,有非常多Utils工具類,這些工具類有的是為了開發者使用的,有的只是提供給Spring框架使用的。瞭解這些工具類,在適當的時候使用這些工具類,對我們平時的開發還是很有幫助的,能極大方便我們的開發。

Spring的工具類都是以Utils結尾,所以要檢視這些工具類,只需要在API文件中查詢所有*Utils即可,可以看到有多達幾十個。在後面的幾篇文章中我會選擇幾個常用的Utils,給大家展示一下Spring中的工具類的有用和常用方法。

原文地址

更多詳細內容請閱讀原文!

首先,這個工具類裡面的所有方法,都是針對字串常見操作,其次,裡面有不少方法,即可以針對String,也可以使用CharSequence;

判斷類

屬於該類別的方法都是在對字串進行一些判定操作:

    //判斷類:
    // boolean isEmpty(Object str):字串是否為空或者空字串:""
    // boolean hasLength(CharSequence str):字串是否為空,或者長度為0
    // boolean hasText(String str):字串是否有內容(不為空,且不全為空格)
    assertFalse(StringUtils.hasText("   "));
    // boolean containsWhitespace(String str):字串是否包含空格
    assertTrue(StringUtils.containsWhitespace("a b"));

字串頭尾操作

屬於該類別的方法,都是對字串前,或者字串後的內容進行判定或者操作;

//字串頭尾操作
// String trimWhitespace(String str):去掉字串前後的空格
assertEquals("abc", StringUtils.trimWhitespace(" abc "));
// String trimAllWhitespace(String str):去掉字串中所有的空格
assertEquals("abc", StringUtils.trimAllWhitespace(" a b c "));
// String trimLeadingWhitespace(String str):去掉字串開頭的空格
// String trimTrailingWhitespace(String str):去掉字串結束的空格

// String trimLeadingCharacter(String str, char leadingCharacter):去掉字串開頭的指定字元;
// String trimTrailingCharacter(String str, char trailingCharacter):去掉字串結尾的指定字元;

// boolean startsWithIgnoreCase(String str, String prefix):
// 判斷字串是否以指定字串開頭,忽略大小寫
assertTrue(StringUtils.startsWithIgnoreCase("abcd", "AB"));
// boolean endsWithIgnoreCase(String str, String suffix):
// 判斷字串是否以指定字串結尾,忽略大小寫

檔案路徑名稱相關操作

檔案路徑名稱相關操作,是針對檔名,檔案路徑,檔案字尾等常見檔案操作中需要用到的方法進行封裝;

// String unqualify(String qualifiedName):
// 得到以.分割的最後一個值,可以非常方便的獲取類似類名或者檔案字尾
assertEquals("java", StringUtils.unqualify("cn.wolfcode.java"));
assertEquals("java", StringUtils.unqualify("cn/wolfcode/Hello.java"));

// String unqualify(String qualifiedName, char separator):
// 得到以給定字元分割的最後一個值,可以非常方便的獲取類似檔名
assertEquals("Hello.java", StringUtils
        .unqualify("cn/wolfcode/Hello.java", File.separatorChar));

// String capitalize(String str):首字母大寫
assertEquals("Wolfcode", StringUtils.capitalize("wolfcode"));

// String uncapitalize(String str):取消首字母大寫
assertEquals("java", StringUtils.uncapitalize("Java"));

// String getFilename(String path):獲取檔名,就不需要再使用FilenameUtils
assertEquals("myfile.txt",
        StringUtils.getFilename("mypath/myfile.txt"));

// String getFilenameExtension(String path):獲取檔案字尾名
assertEquals("txt",
        StringUtils.getFilenameExtension("mypath/myfile.txt"));

// String stripFilenameExtension(String path):擷取掉檔案路徑字尾
assertEquals("mypath/myfile",
        StringUtils.stripFilenameExtension("mypath/myfile.txt"));

// String applyRelativePath(String path, String relativePath):
// 找到給定的檔案,和另一個相對路徑的檔案,返回第二個檔案的全路徑
// 列印:d:/java/wolfcode/other/Some.java
System.out.println(StringUtils.applyRelativePath(
        "d:/java/wolfcode/Test.java", "other/Some.java"));
// 但是不支援重新定位絕對路徑和上級目錄等複雜一些的相對路徑寫法:
// 仍然列印:d:/java/wolfcode/../other/Some.java
System.out.println(StringUtils.applyRelativePath(
        "d:/java/wolfcode/Test.java", "../other/Some.java"));

// String cleanPath(String path):
// 清理檔案路徑,這個方法配合applyRelativePath就可以計算一些簡單的相對路徑了
// 列印:d:/java/other/Some.java
System.out.println(
        StringUtils.cleanPath("d:/java/wolfcode/../other/Some.java"));
// 需求:獲取d:/java/wolfcode/Test.java相對路徑為../../other/Some.java的檔案全路徑:
// 列印:d:/other/Some.java
System.out.println(StringUtils.cleanPath(StringUtils.applyRelativePath(
        "d:/java/wolfcode/Test.java", "../../other/Some.java")));

// boolean pathEquals(String path1, String path2):
// 判斷兩個檔案路徑是否相同,會先執行cleanPath之後再比較
assertTrue(StringUtils.pathEquals("d:/wolfcode.txt",
        "d:/somefile/../wolfcode.txt"));

字串和子串的操作

該組方法中主要是提供了字串和字串子串的操作,比如子串的匹配,子串的替換;子串的刪除等等操作;

// boolean substringMatch(CharSequence str, int index, CharSequence
// substring):判斷從指定索引開始,是否匹配子字串
assertTrue(StringUtils.substringMatch("aabbccdd",