一、Java中StringUtil工具
在Java开发中,字符串处理是一项非常常见且必不可少的任务。为了方便进行字符串的操作和处理,通常会使用一些工具类来提供各种功能。本文将提供一个基于String的StringUtil的工具类,它继承自Spring的StringUtils类,并提供了一系列实用的方法来处理字符串。
二、Java中字符串处理要求的一般方法
在Java中,字符串处理通常包括以下一些常见的操作:
- 字符串的拼接、分割和替换。
- 字符串的格式化,例如按照特定的模板进行格式化。
- 字符串的空白处理,判断字符串是否为空或只包含空白字符。
- 字符串的查找和匹配,包括判断字符串是否包含特定的子串或是否符合特定的模式。
- 字符串的大小写转换。
- 字符串的截取和提取。
三、主要内容
StringUtil工具类提供了许多方法来满足上述字符串处理的需求。它包含了一些判断字符串是否为空、是否为数字、是否包含特定字符等的方法。此外,还提供了字符串的格式化、分割、拼接、随机生成、转义HTML、清理字符等功能。
四、包含的全部方法(53项)
isBlank方法:用于检查给定的CharSequence是否只包含空白字符。isNotBlank方法:检查CharSequence是否不为空、不为null且不包含只空白字符。isAnyBlank方法:判断多个CharSequence中是否有任意一个为空白。isNoneBlank方法:判断多个CharSequence是否全不为空白。isAllBlank方法:判断多个CharSequence是否全为空白。isNumeric方法:判断字符串是否为数字。format方法:有两个重载形式,一个用于将字符串中特定模式的字符转换成map中对应的值,另一个用于按照log格式的规则进行格式化。join方法:用于将Collection或String数组转换为以逗号或指定分隔符分隔的字符串。simpleMatch方法:判断字符串是否符合指定的表达式模式。randomUUID方法:生成UUID。escapeHtml方法:转义HTML用于安全过滤。cleanChars方法:清理字符串,去除某些不可见字符。cleanText方法:清理字符串,去除某些不可见字符和一些SQL特殊字符。cleanIdentifier方法:获取标识符,用于参数清理。random方法:生成指定长度和类型的随机数。indexedFormat方法:有序地格式化文本,使用{number}做为占位符。format方法:使用{varName}占位符格式化文本。split方法:切分字符串,可选择是否去除切分后每个元素两边的空白符、是否去除空白项以及限制分片数。splitTrim方法:与split方法类似,但会去除切分后每个元素两边的空白符和空白项。contains方法:判断指定字符是否在字符串中出现过。containsAny方法:查找指定字符串是否包含指定字符串列表中的任意一个字符串。getContainsStr方法:查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串。containsIgnoreCase方法:判断是否包含特定字符,忽略大小写。containsAnyIgnoreCase方法:查找指定字符串是否包含指定字符串列表中的任意一个字符串,忽略大小写。getContainsStrIgnoreCase方法:查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串,忽略大小写。sub方法:改进JDK的subString方法,对索引进行了修正。subBefore方法:截取分隔字符串之前的字符串,不包括分隔字符串。subAfter方法:截取分隔字符串之后的字符串,不包括分隔字符串。subBetween方法:截取指定字符串中间部分,不包括标识字符串。removePrefix方法:去掉指定前缀。removePrefixIgnoreCase方法:忽略大小写去掉指定前缀。removeSuffix方法:去掉指定后缀。removeSufAndLowerFirst方法:去掉指定后缀,并小写首字母。removeSuffixIgnoreCase方法:忽略大小写去掉指定后缀。firstCharToLower方法:首字母变小写。firstCharToUpper方法:首字母变大写。subPre方法:切割指定位置之前部分的字符串。subSuf方法:切割指定位置之后部分的字符串。indexOf方法:指定范围内查找指定字符。indexOfIgnoreCase方法:指定范围内查找字符串,忽略大小写。lastIndexOfIgnoreCase方法:指定范围内反向查找字符串,忽略大小写。ordinalIndexOf方法:返回字符串在另一个字符串中第ordinal次出现的位置。isSubEquals方法:判断两个字符串的子串是否相同,可选择是否忽略大小写。equals方法:比较两个字符串是否相等,可选择是否忽略大小写。builder方法:创建StringBuilder对象,可选择指定初始大小或初始字符串列表。appendBuilder方法:向StringBuilder对象中追加字符串。getReader方法:获得StringReader。getWriter方法:获得StringWriter。count方法:统计指定内容中包含指定字符串或字符的数量。underlineToHump方法:下划线转驼峰。humpToUnderline方法:驼峰转下划线。lineToHump方法:横线转驼峰。humpToLine方法:驼峰转横线。
五、总结
本文StringUtil工具类提供了丰富的方法来处理字符串,涵盖了字符串的各种常见操作。通过使用这些方法,可以方便地进行字符串的判断、格式化、分割、拼接、查找等操作,提高了开发效率。在实际开发中,可以根据具体的需求选择合适的方法来处理字符串,使代码更加简洁和可读。同时,需要注意方法的参数和返回值,以确保正确使用这些方法。希望这个工具类能够对Java开发者在字符串处理方面提供帮助。
六、源码
附上工具类源码:
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.PatternMatchUtils;
import org.springframework.web.util.HtmlUtils;
import java.io.StringReader;
import java.io.StringWriter;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Pattern;
import java.util.stream.Stream;
/**
* 继承自Spring util的工具类,封装String常用操作
*
* @author Rzc
*/
public class StringUtil extends org.springframework.util.StringUtils {
public static final int INDEX_NOT_FOUND = -1;
/**
* Check whether the given {@code CharSequence} contains actual <em>text</em>.
* <p>More specifically, this method returns {@code true} if the
* {@code CharSequence} is not {@code null}, its length is greater than
* 0, and it contains at least one non-whitespace character.
* <pre class="code">
* StringUtil.isBlank(null) = true
* StringUtil.isBlank("") = true
* StringUtil.isBlank(" ") = true
* StringUtil.isBlank("12345") = false
* StringUtil.isBlank(" 12345 ") = false
* </pre>
*
* @param cs the {@code CharSequence} to check (may be {@code null})
* @return {@code true} if the {@code CharSequence} is not {@code null},
* its length is greater than 0, and it does not contain whitespace only
* @see Character#isWhitespace
*/
public static boolean isBlank(final CharSequence cs) {
return !StringUtil.hasText(cs);
}
/**
* <p>Checks if a CharSequence is not empty (""), not null and not whitespace only.</p>
* <pre>
* StringUtil.isNotBlank(null) = false
* StringUtil.isNotBlank("") = false
* StringUtil.isNotBlank(" ") = false
* StringUtil.isNotBlank("bob") = true
* StringUtil.isNotBlank(" bob ") = true
* </pre>
*
* @param cs the CharSequence to check, may be null
* @return {@code true} if the CharSequence is
* not empty and not null and not whitespace
* @see Character#isWhitespace
*/
public static boolean isNotBlank(final CharSequence cs) {
return StringUtil.hasText(cs);
}
/**
* 有 任意 一个 Blank
*
* @param css CharSequence
* @return boolean
*/
public static boolean isAnyBlank(final CharSequence... css) {
if (ObjectUtil.isEmpty(css)) {
return true;
}
return Stream.of(css).anyMatch(StringUtil::isBlank);
}
/**
* 是否全非 Blank
*
* @param css CharSequence
* @return boolean
*/
public static boolean isNoneBlank(final CharSequence... css) {
if (ObjectUtil.isEmpty(css)) {
return false;
}
return Stream.of(css).allMatch(StringUtil::isNotBlank);
}
/**
* 是否全为 Blank
*
* @param css CharSequence
* @return boolean
*/
public static boolean isAllBlank(final CharSequence... css) {
return Stream.of(css).allMatch(StringUtil::isBlank);
}
/**
* 判断一个字符串是否是数字
*
* @param cs the CharSequence to check, may be null
* @return {boolean}
*/
public static boolean isNumeric(final CharSequence cs) {
if (isBlank(cs)) {
return false;
}
for (int i = cs.length(); --i >= 0; ) {
int chr = cs.charAt(i);
if (chr < 48 || chr > 57) {
return false;
}
}
return true;
}
/**
* 将字符串中特定模式的字符转换成map中对应的值
* <p>
* use: format("my name is ${name}, and i like ${like}!", {"name":"s.l.m", "like": "Java"})
*
* @param message 需要转换的字符串
* @param params 转换所需的键值对集合
* @return 转换后的字符串
*/
public static String format(@Nullable String message, @Nullable Map<String, ?> params) {
// message 为 null 返回空字符串
if (message == null) {
return StringPool.EMPTY;
}
// 参数为 null 或者为空
if (params == null || params.isEmpty()) {
return message;
}
// 替换变量
StringBuilder sb = new StringBuilder((int) (message.length() * 1.5));
int cursor = 0;
for (int start, end; (start = message.indexOf(StringPool.DOLLAR_LEFT_BRACE, cursor)) != -1 && (end = message.indexOf(StringPool.RIGHT_BRACE, start)) != -1; ) {
sb.append(message, cursor, start);
String key = message.substring(start + 2, end);
Object value = params.get(StringUtil.trimWhitespace(key));
sb.append(value == null ? StringPool.EMPTY : value);
cursor = end + 1;
}
sb.append(message.substring(cursor));
return sb.toString();
}
/**
* 同 log 格式的 format 规则
* <p>
* use: format("my name is {}, and i like {}!", "s.l.m", "Java")
*
* @param message 需要转换的字符串
* @param arguments 需要替换的变量
* @return 转换后的字符串
*/
public static String format(@Nullable String message, @Nullable Object... arguments) {
// message 为 null 返回空字符串
if (message == null) {
return StringPool.EMPTY;
}
// 参数为 null 或者为空
if (arguments == null || arguments.length == 0) {
return message;
}
StringBuilder sb = new StringBuilder((int) (message.length() * 1.5));
int cursor = 0;
int index = 0;
int argsLength = arguments.length;
for (int start, end; (start = message.indexOf('{', cursor)) != -1 && (end = message.indexOf('}', start)) != -1 && index < argsLength; ) {
sb.append(message, cursor, start);
sb.append(arguments[index]);
cursor = end + 1;
index++;
}
sb.append(message.substring(cursor));
return sb.toString();
}
/**
* 格式化执行时间,单位为 ms 和 s,保留三位小数
*
* @param nanos 纳秒
* @return 格式化后的时间
*/
public static String format(long nanos) {
if (nanos < 1) {
return "0ms";
}
double millis = (double) nanos / (1000 * 1000);
// 不够 1 ms,最小单位为 ms
if (millis > 1000) {
return String.format("%.3fs", millis / 1000);
} else {
return String.format("%.3fms", millis);
}
}
/**
* Convert a {@code Collection} into a delimited {@code String} (e.g., CSV).
* <p>Useful for {@code toString()} implementations.
*
* @param coll the {@code Collection} to convert
* @return the delimited {@code String}
*/
public static String join(Collection<?> coll) {
return StringUtil.collectionToCommaDelimitedString(coll);
}
/**
* Convert a {@code Collection} into a delimited {@code String} (e.g. CSV).
* <p>Useful for {@code toString()} implementations.
*
* @param coll the {@code Collection} to convert
* @param delim the delimiter to use (typically a ",")
* @return the delimited {@code String}
*/
public static String join(Collection<?> coll, String delim) {
return StringUtil.collectionToDelimitedString(coll, delim);
}
/**
* Convert a {@code Str

最低0.47元/天 解锁文章
662

被折叠的 条评论
为什么被折叠?



