A comprehensive Java utility library providing static method wrappers for common operations to reduce API learning costs and improve development efficiency
—
Comprehensive string manipulation utilities through the StrUtil class, which extends CharSequenceUtil and provides null-safe string operations.
import cn.hutool.core.util.StrUtil;// Check if string is blank (null, empty, or whitespace only)
public static boolean isBlank(CharSequence str);
public static boolean isNotBlank(CharSequence str);
// Check if string is empty (null or zero length)
public static boolean isEmpty(CharSequence str);
public static boolean isNotEmpty(CharSequence str);
// Check if object is blank string
public static boolean isBlankIfStr(Object obj);
public static boolean isEmptyIfStr(Object obj);
// Check if all strings are blank
public static boolean isAllBlank(CharSequence... strs);
public static boolean isAllEmpty(CharSequence... strs);
// Check if any string is blank
public static boolean hasBlank(CharSequence... strs);
public static boolean hasEmpty(CharSequence... strs);// Check if string contains only letters
public static boolean isAlpha(CharSequence str);
// Check if string contains only digits
public static boolean isNumeric(CharSequence str);
// Check if string contains only letters and digits
public static boolean isAlphanumeric(CharSequence str);
// Check if string contains only lowercase letters
public static boolean isLowerCase(CharSequence str);
// Check if string contains only uppercase letters
public static boolean isUpperCase(CharSequence str);// Format string with positional parameters
public static String format(String template, Object... params);
// Format string with named parameters
public static String format(String template, Map<String, Object> map);
// Format string with custom placeholder
public static String format(String template, Map<String, Object> map,
boolean ignoreNull);Usage Examples:
// Positional parameters
String result = StrUtil.format("Hello {}, welcome to {}", "World", "Hutool");
// Output: "Hello World, welcome to Hutool"
// Named parameters
Map<String, Object> params = MapUtil.of("name", "John", "age", 25);
String result = StrUtil.format("Name: {name}, Age: {age}", params);
// Output: "Name: John, Age: 25"
// With null handling
String result = StrUtil.format("Value: {missing}",
MapUtil.of("other", "value"), true);
// Output: "Value: {missing}" (placeholder preserved for missing values)// Convert to various cases
public static String toCamelCase(CharSequence str);
public static String toUnderlineCase(CharSequence str);
public static String upperFirst(CharSequence str);
public static String lowerFirst(CharSequence str);
public static String swapCase(CharSequence str);// Trim operations
public static String trim(CharSequence str);
public static String trimStart(CharSequence str);
public static String trimEnd(CharSequence str);
public static void trim(String[] strs);
// Padding operations
public static String padPre(CharSequence str, int minLength, char padChar);
public static String padAfter(CharSequence str, int minLength, char padChar);
public static String center(CharSequence str, int size, char padChar);// Safe substring operations
public static String sub(CharSequence str, int fromIndex, int toIndex);
public static String subPre(CharSequence str, int toIndex);
public static String subSuf(CharSequence str, int fromIndex);
// Substring with specific delimiters
public static String subBefore(CharSequence str, CharSequence separator,
boolean isLastSeparator);
public static String subAfter(CharSequence str, CharSequence separator,
boolean isLastSeparator);
public static String subBetween(CharSequence str, CharSequence before,
CharSequence after);// Join collections with delimiter
public static String join(CharSequence delimiter, Object... elements);
public static String join(CharSequence delimiter, Iterable<?> iterable);
// Join arrays
public static <T> String join(CharSequence delimiter, T[] array);
public static String join(CharSequence delimiter, Object[] array,
int startIndex, int endIndex);// Split string by delimiter
public static String[] split(CharSequence str, CharSequence separator);
public static String[] split(CharSequence str, char separator);
public static List<String> splitTrim(CharSequence str, CharSequence separator);
// Split with limit
public static String[] split(CharSequence str, CharSequence separator, int limit);
// Split by regex
public static String[] splitByRegex(CharSequence str, String regex);// Check if string contains substring
public static boolean contains(CharSequence str, CharSequence searchStr);
public static boolean containsIgnoreCase(CharSequence str, CharSequence searchStr);
// Count occurrences
public static int count(CharSequence content, CharSequence strForSearch);
// Index operations
public static int indexOf(CharSequence str, CharSequence searchStr,
int fromIndex, boolean ignoreCase);
public static int lastIndexOf(CharSequence str, CharSequence searchStr,
int fromIndex, boolean ignoreCase);// Replace operations
public static String replace(CharSequence str, CharSequence searchStr,
CharSequence replacement);
public static String replaceIgnoreCase(CharSequence str, CharSequence searchStr,
CharSequence replacement);
// Replace first/last occurrence
public static String replaceFirst(CharSequence str, CharSequence searchStr,
CharSequence replacement);
public static String replaceLast(CharSequence str, CharSequence searchStr,
CharSequence replacement);
// Replace by regex
public static String replaceByRegex(CharSequence str, String regex,
String replacement);// Equality checks
public static boolean equals(CharSequence str1, CharSequence str2);
public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2);
// Prefix and suffix checks
public static boolean startWith(CharSequence str, CharSequence prefix);
public static boolean startWithIgnoreCase(CharSequence str, CharSequence prefix);
public static boolean endWith(CharSequence str, CharSequence suffix);
public static boolean endWithIgnoreCase(CharSequence str, CharSequence suffix);
// String similarity
public static double similar(CharSequence str1, CharSequence str2);// Repeat string
public static String repeat(CharSequence str, int count);
public static String repeat(char ch, int count);
// Generate random string
public static String random(int count);
public static String random(int count, String baseString);// Byte conversion
public static String str(byte[] bytes, Charset charset);
public static String utf8Str(byte[] bytes);
// Object to string
public static String toString(Object obj);
public static String toString(Object obj, String nullDefault);
// Wrap operations
public static String wrap(CharSequence str, CharSequence prefixAndSuffix);
public static String wrap(CharSequence str, CharSequence prefix, CharSequence suffix);
public static String unwrap(CharSequence str, CharSequence prefixAndSuffix);The StrUtil class implements StrPool interface providing common string constants:
// Common characters
String SPACE = " ";
String TAB = "\t";
String DOT = ".";
String SLASH = "/";
String BACKSLASH = "\\";
String CR = "\r";
String LF = "\n";
String CRLF = "\r\n";
String UNDERLINE = "_";
String DASHED = "-";
String COMMA = ",";
// Common strings
String NULL = "null";
String EMPTY = "";
String TRUE = "true";
String FALSE = "false";
// HTML entities
String AMP = "&";
String QUOTE = """;
String APOS = "'";
String LT = "<";
String GT = ">";All string operations in Hutool are null-safe and follow consistent naming conventions. Methods return null for null inputs unless documented otherwise, and support both String and CharSequence parameters for maximum flexibility.
Install with Tessl CLI
npx tessl i tessl/maven-cn-hutool--hutool-all