本文主要是介绍常用工具类-StringUtils,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
常用工具类-StringUtils
- StringUtils常用方法概览
- ① 判断字符串是否为空
- ② 分隔字符串
- ③ 判断字符串是否为纯数字的字符串
- ④ 将集合拼接为字符串
- 小结
StringUtils常用方法概览
StringUtils
是 Apache Commons Lang 库中的一个非常有用的工具类,它提供了许多操作 String
的静态方法。使用 StringUtils
可以使字符串操作更加简便和高效。以下是一些 StringUtils
中常用的方法:
- isEmpty() 和 isNotEmpty():
isEmpty(String str)
: 检查一个字符串是否为空(null
或长度为 0)。isNotEmpty(String str)
: 检查一个字符串是否不为空。
- isBlank() 和 isNotBlank():
isBlank(String str)
: 检查一个字符串是否为空白(null
、空或仅包含空白字符)。isNotBlank(String str)
: 检查一个字符串是否不为空白。
- trim() 和 strip():
trim(String str)
: 去除字符串两端的空白字符。strip(String str, String stripChars)
: 去除字符串两端指定的字符。
- equals() 和 equalsIgnoreCase():
equals(String str1, String str2)
: 比较两个字符串是否相等,处理null
值。equalsIgnoreCase(String str1, String str2)
: 比较两个字符串是否相等,不区分大小写,同时处理null
值。
- join() 和 split():
join(Object[] array, String separator)
: 使用指定的分隔符将数组元素连接成一个字符串。join(Iterable<?> iterable, String separator)
: 使用指定的分隔符将可迭代对象的元素连接成一个字符串。split(String str, String separatorChars)
: 根据指定的分隔符字符集将字符串拆分为数组。
- substring() 和 left() / right():
substring(String str, int start)
: 获取字符串从指定位置开始的子字符串。substring(String str, int start, int end)
: 获取字符串从起始位置到结束位置的子字符串。left(String str, int len)
: 获取字符串最左边的指定长度的子字符串。right(String str, int len)
: 获取字符串最右边的指定长度的子字符串。
- contains() 和 containsIgnoreCase():
contains(String str, CharSequence seq)
: 检查一个字符串是否包含另一个字符序列。containsIgnoreCase(String str, CharSequence seq)
: 检查一个字符串是否包含另一个字符序列,不区分大小写。
- replace() 和 overlay():
replace(String text, String searchString, String replacement)
: 替换字符串中所有出现的指定子字符串。overlay(String str, String overlay, int start, int end)
: 用新的字符串覆盖原始字符串的指定部分。
- capitalize() 和 uncapitalize():
capitalize(String str)
: 将字符串的首字母变为大写。uncapitalize(String str)
: 将字符串的首字母变为小写。
- remove() 和 delete():
remove(String str, char remove)
: 移除字符串中所有出现的指定字符。deleteWhitespace(String str)
: 删除字符串中的所有空白字符。
这只是 StringUtils
类提供的方法的一小部分。在实际开发中,这个类可以大大简化字符串的操作和处理。
下面,使用几个StringUtils类的方法练习一下!
① 判断字符串是否为空
常用的判断字符串为空的方法:
- isEmpty():检查一个字符串是否为空(
null
或长度为 0)。 - isBlank(): 检查一个字符串是否为空白(
null
、空或仅包含空白字符)。 - isNotEmpty():检查一个字符串是否不为空。
- isNotBlank():检查一个字符串是否不为空白。
查看一下isEmpty()和isBlank()的源码:
// isEmpty
public static boolean isEmpty(CharSequence cs) {return cs == null || cs.length() == 0;
}
// isBlank
public static boolean isBlank(CharSequence cs) {int strLen = length(cs);if (strLen == 0) {return true;} else {for(int i = 0; i < strLen; ++i) {if (!Character.isWhitespace(cs.charAt(i))) {return false;}}return true;}
}
② 分隔字符串
String类的split()方法可以完成字符串切片分割的功能,但是相较于StringUtils类中的split()方法较为不安全,如下面的代码
// 分隔字符串
String strToSplit = null;
String[] split1 = strToSplit.split(strToSplit); // 抛异常 java.lang.NullPointerException// StringUtils 更为安全,当传入的字符串为空时,不会抛异常
String[] split2 = StringUtils.split(strToSplit);
System.out.println(Arrays.toString(split2)); // null
StringUtils.split()的源码,其实最核心的方法,应该是splitWorker(),splitWorker()方法中完成了字符串切割的字符串检验,字符串切片。
public static String[] split(String str) {return split(str, (String)null, -1);
}public static String[] split(String str, String separatorChars, int max) {return splitWorker(str, separatorChars, max, false);
}private static String[] splitWorker(String str, String separatorChars, int max, boolean preserveAllTokens) {if (str == null) {return null;} else {int len = str.length();if (len == 0) {return ArrayUtils.EMPTY_STRING_ARRAY;} else {List<String> list = new ArrayList();int sizePlus1 = 1;int i = 0;int start = 0;boolean match = false;boolean lastMatch = false;if (separatorChars != null) {if (separatorChars.length() != 1) {label87:while(true) {while(true) {if (i >= len) {break label87;}if (separatorChars.indexOf(str.charAt(i)) >= 0) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}} else {char sep = separatorChars.charAt(0);label71:while(true) {while(true) {if (i >= len) {break label71;}if (str.charAt(i) == sep) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}}} else {label103:while(true) {while(true) {if (i >= len) {break label103;}if (Character.isWhitespace(str.charAt(i))) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}}if (match || preserveAllTokens && lastMatch) {list.add(str.substring(start, i));}return (String[])list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);}}}
③ 判断字符串是否为纯数字的字符串
StringUtils.isNumeric()方法,可以更方便的判断当前的字符串是否是一个纯数字的字符串。
StringUtils.isNumericSpace() 方法,可以判断含有空格的数字字符串。
String strNum1 = "123";
String strNum2 = "123.45";
String strNum3 = "123f";
String strNum4 = "123q";
// 判断是否为纯数字字符串
System.out.println(StringUtils.isNumeric(strNum1)); // true
System.out.println(StringUtils.isNumeric(strNum2)); // false
System.out.println(StringUtils.isNumeric(strNum3)); // false
System.out.println(StringUtils.isNumeric(strNum4)); // false// isNumericSpace() 方法,可以判断含有空格的数字字符串
String strNum5 = "12 3";
System.out.println(StringUtils.isNumericSpace(strNum5)); // true
public static boolean isNumeric(CharSequence cs) {if (isEmpty(cs)) {return false;} else {int sz = cs.length();for(int i = 0; i < sz; ++i) {if (!Character.isDigit(cs.charAt(i))) {return false;}}return true;}
}
④ 将集合拼接为字符串
常见的场景,将集合的内容拼接为字符串
// 自己拼接集合内容为字符串
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("zhaoliu");
list.add("houqi");
System.out.println(list.toString()); // [zhangsan, lisi, wangwu, zhaoliu, houqi]
如果我们自己将集合的内容拼接为字符串的话,代码可能会写成下面这样:
写法一:利用增强for遍历集合内容,然后使用String += 去拼接字符串,缺点浪费内存,创建了循环次数+1个String类对象。
String strTemp = null;
for(String item : list){strTemp += item + ",";
}
System.out.println(strTemp); // nullzhangsan,lisi,wangwu,zhaoliu,houqi,
写法二:使用StringBuilder来完成拼接,还是不够优雅。虽然只创建了两个对象,StringBuilder对象和sb.toString()的一个对象。
StringBuilder sb = new StringBuilder();
for (String item : list){sb.append(item).append(",");
}
System.out.println(sb);
而利用StringUtils.join()方法,我们可以非常简单的去完成集合内容的拼接,其实这段代码的底层也是StringBuilder,只不过我们调用更为方便了。
String joinListToStr = StringUtils.join(list, ",");
System.out.println(joinListToStr); // zhangsan,lisi,wangwu,zhaoliu,houqi
StringUtils.join()方法底层源码
public static String join(Iterator<?> iterator, String separator) {if (iterator == null) {return null;} else if (!iterator.hasNext()) {return "";} else {Object first = iterator.next();if (!iterator.hasNext()) {return Objects.toString(first, "");} else {StringBuilder buf = new StringBuilder(256);if (first != null) {buf.append(first);}while(iterator.hasNext()) {if (separator != null) {buf.append(separator);}Object obj = iterator.next();if (obj != null) {buf.append(obj);}}return buf.toString();}}
}
小结
StringUtils
是 Apache Commons Lang 库中的一个非常有用的工具类,它提供了许多操作 String
的静态方法。灵活使用,多读源码!
这篇关于常用工具类-StringUtils的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!