Apache commons lang3包下的StringUtils工具类中封装了一些字符串操作的方法,非常实用,使用起来也非常方便。StringUtils类在操作字符串时,即使操作的为null值也是安全的,不会报NullPointerException,这一点在后面的例子中再具体说明。因此,在操作字符串时使用StringUtils相比使用原生的String会更加安全。
1.字符串空校验
/*** 检查字符串是否为空 ("") 或 null* StringUtils.isEmpty(null) = true* StringUtils.isEmpty("") = true* StringUtils.isEmpty(" ") = false* StringUtils.isEmpty("bob") = false* StringUtils.isEmpty(" bob ") = false*/public static boolean isEmpty(String str) {return str == null || str.length() == 0;}
/*** 检查字符串是否为非空* StringUtils.isNotEmpty(null) = false* StringUtils.isNotEmpty("") = false* StringUtils.isNotEmpty(" ") = true* StringUtils.isNotEmpty("bob") = true* StringUtils.isNotEmpty(" bob ") = true*/public static boolean isNotEmpty(String str) {return !StringUtils.isEmpty(str);}
/*** 检验字符串是否是null,空或空格* StringUtils.isBlank(null) = true* StringUtils.isBlank("") = true* StringUtils.isBlank(" ") = true* StringUtils.isBlank("bob") = false* StringUtils.isBlank(" bob ") = false*/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)) == false)) {return false;}}return true;}
/*** 检验字符串是否是非null,非空且非空格* StringUtils.isNotBlank(null) = false* StringUtils.isNotBlank("") = false* StringUtils.isNotBlank(" ") = false* StringUtils.isNotBlank("bob") = true* StringUtils.isNotBlank(" bob ") = true* </pre>*/public static boolean isNotBlank(String str) {return !StringUtils.isBlank(str);}
2.去字符处理
/*** 从该字符串的两端删除控制字符,返回值为null则处理为(“”),返回值为(“”)则处理为(“”)(@link #trimToEmpty(String))* StringUtils.clean(null) = ""* StringUtils.clean("") = ""* StringUtils.clean("abc") = "abc"* StringUtils.clean(" abc ") = "abc"* StringUtils.clean(" ") = ""*/public static String clean(String str) {return str == null ? EMPTY : str.trim();}
/*** 从该字符串的两端删除控制字符,返回值为null则处理为null,返回值为("")则处理为("")* StringUtils.trim(null) = null* StringUtils.trim("") = ""* StringUtils.trim(" ") = ""* StringUtils.trim("abc") = "abc"* StringUtils.trim(" abc ") = "abc"*/public static String trim(String str) {return str == null ? null : str.trim();}
/*** 从该字符串的两端删除控制字符,返回值为null或(“”)则处理为null* StringUtils.trimToNull(null) = null* StringUtils.trimToNull("") = null* StringUtils.trimToNull(" ") = null* StringUtils.trimToNull("abc") = "abc"* StringUtils.trimToNull(" abc ") = "abc"*/public static String trimToNull(String str) {String ts = trim(str);return isEmpty(ts) ? null : ts;}
/*** 从该字符串的两端删除控制字符,返回值为null则处理为(""),返回值为("")则处理为("")* StringUtils.trimToEmpty(null) = ""* StringUtils.trimToEmpty("") = ""* StringUtils.trimToEmpty(" ") = ""* StringUtils.trimToEmpty("abc") = "abc"* StringUtils.trimToEmpty(" abc ") = "abc"*/public static String trimToEmpty(String str) {return str == null ? EMPTY : str.trim();}
/*** 从字符串的开头和结尾删除空格,返回值为null则处理为null,返回值为(“”)则处理为(“”)* StringUtils.strip(null) = null* StringUtils.strip("") = ""* StringUtils.strip(" ") = ""* StringUtils.strip("abc") = "abc"* StringUtils.strip(" abc") = "abc"* StringUtils.strip("abc ") = "abc"* StringUtils.strip(" abc ") = "abc"* StringUtils.strip(" ab c ") = "ab c"*/public static String strip(String str) {return strip(str, null);}
/*** 从字符串的开头和结尾删除空格,返回值为null则处理为null,返回值为("")则处理为null* StringUtils.stripToNull(null) = null* StringUtils.stripToNull("") = null* StringUtils.stripToNull(" ") = null* StringUtils.stripToNull("abc") = "abc"* StringUtils.stripToNull(" abc") = "abc"* StringUtils.stripToNull("abc ") = "abc"* StringUtils.stripToNull(" abc ") = "abc"* StringUtils.stripToNull(" ab c ") = "ab c"*/public static String stripToNull(String str) {if (str == null) {return null;}str = strip(str, null);return str.length() == 0 ? null : str;}
/*** 从字符串的开头和结尾删除空格,返回值为null则处理为(""),返回值为("")则处理为("")* StringUtils.stripToEmpty(null) = ""* StringUtils.stripToEmpty("") = ""* StringUtils.stripToEmpty(" ") = ""* StringUtils.stripToEmpty("abc") = "abc"* StringUtils.stripToEmpty(" abc") = "abc"* StringUtils.stripToEmpty("abc ") = "abc"* StringUtils.stripToEmpty(" abc ") = "abc"* StringUtils.stripToEmpty(" ab c ") = "ab c"*/public static String stripToEmpty(String str) {return str == null ? EMPTY : strip(str, null);}
/*** 从一个字符串的开始和结束中删除任何一组字符。这与{@link String#trim()}类似,但允许控制字符的去除。* StringUtils.strip(null, *) = null* StringUtils.strip("", *) = ""* StringUtils.strip("abc", null) = "abc"* StringUtils.strip(" abc", null) = "abc"* StringUtils.strip("abc ", null) = "abc"* StringUtils.strip(" abc ", null) = "abc"* StringUtils.strip(" abcyx", "xyz") = " abc"*/public static String strip(String str, String stripChars) {if (isEmpty(str)) {return str;}str = stripStart(str, stripChars);return stripEnd(str, stripChars);}
/*** 从一个字符串的开始和结束中删除任何一组字符,去除前端的控制符。* StringUtils.stripStart(null, *) = null* StringUtils.stripStart("", *) = ""* StringUtils.stripStart("abc", "") = "abc"* StringUtils.stripStart("abc", null) = "abc"* StringUtils.stripStart(" abc", null) = "abc"* StringUtils.stripStart("abc ", null) = "abc "* StringUtils.stripStart(" abc ", null) = "abc "* StringUtils.stripStart("yxabc ", "xyz") = "abc "*/public static String stripStart(String str, String stripChars) {int strLen;if (str == null || (strLen = str.length()) == 0) {return str;}int start = 0;if (stripChars == null) {while ((start != strLen) && Character.isWhitespace(str.charAt(start))) {start++;}} else if (stripChars.length() == 0) {return str;} else {while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != INDEX_NOT_FOUND)) {start++;}}return str.substring(start);}
/*** 从一个字符串的开始和结束中删除任何一组字符,去除后端的控制符。* StringUtils.stripEnd(null, *) = null* StringUtils.stripEnd("", *) = ""* StringUtils.stripEnd("abc", "") = "abc"* StringUtils.stripEnd("abc", null) = "abc"* StringUtils.stripEnd(" abc", null) = " abc"* StringUtils.stripEnd("abc ", null) = "abc"* StringUtils.stripEnd(" abc ", null) = " abc"* StringUtils.stripEnd(" abcyx", "xyz") = " abc"* StringUtils.stripEnd("120.00", ".0") = "12"*/public static String stripEnd(String str, String stripChars) {int end;if (str == null || (end = str.length()) == 0) {return str;}if (stripChars == null) {while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) {end--;}} else if (stripChars.length() == 0) {return str;} else {while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != INDEX_NOT_FOUND)) {end--;}}return str.substring(0, end);}
3.去除数组对象中的字符处理
/*** 将数组中的每个字符串两端的空格删除。* Whitespace is defined by {@link Character#isWhitespace(char)}.</p>* StringUtils.stripAll(null) = null* StringUtils.stripAll([]) = []* StringUtils.stripAll(["abc", " abc"]) = ["abc", "abc"]* StringUtils.stripAll(["abc ", null]) = ["abc", null]*/public static String[] stripAll(String[] strs) {return stripAll(strs, null);}
/*** 将数组中的每个字符串的开头和结尾开始删除任何一组字符。* StringUtils.stripAll(null, *) = null* StringUtils.stripAll([], *) = []* StringUtils.stripAll(["abc", " abc"], null) = ["abc", "abc"]* StringUtils.stripAll(["abc ", null], null) = ["abc", null]* StringUtils.stripAll(["abc ", null], "yz") = ["abc ", null]* StringUtils.stripAll(["yabcz", null], "yz") = ["abc", null]** @param strs 从中删除字符的数组可能为空* @param 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;}
4.字符串比较
/*** 比较两个字符串,如果它们相等,则返回 true 。* StringUtils.equals(null, null) = true* StringUtils.equals(null, "abc") = false* StringUtils.equals("abc", null) = false* StringUtils.equals("abc", "abc") = true* StringUtils.equals("abc", "ABC") = false*/public static boolean equals(String str1, String str2) {return str1 == null ? str2 == null : str1.equals(str2);}
/*** 比较两个字符串,如果它们相同,则返回 true ,忽略大小写。** <p><code>null</code>s are handled without exceptions. Two <code>null</code>* references are considered equal. Comparison is case insensitive.</p>** <pre>* StringUtils.equalsIgnoreCase(null, null) = true* StringUtils.equalsIgnoreCase(null, "abc") = false* StringUtils.equalsIgnoreCase("abc", null) = false* StringUtils.equalsIgnoreCase("abc", "abc") = true* StringUtils.equalsIgnoreCase("abc", "ABC") = true* </pre>** @see java.lang.String#equalsIgnoreCase(String)* @param str1 the first String, may be null* @param str2 the second String, may be null* @return <code>true</code> if the Strings are equal, case insensitive, or* both <code>null</code>*/public static boolean equalsIgnoreCase(String str1, String str2) {return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);}