A comprehensive Java utility library providing static method wrappers for common operations to reduce API learning costs and improve development efficiency
—
Specialized utilities for validation, random generation, reflection, system operations, and various other common programming tasks.
import cn.hutool.core.util.*;
import cn.hutool.core.lang.Validator;
import cn.hutool.system.SystemUtil;
import cn.hutool.extra.qr.QrCodeUtil;
import cn.hutool.captcha.CaptchaUtil;// Email validation
public static boolean isEmail(CharSequence email);
// Phone number validation
public static boolean isPhone(CharSequence mobile);
public static boolean isMobile(CharSequence mobile);
// ID card validation
public static boolean isCitizenId(CharSequence citizenId);
public static boolean isValidCard(CharSequence cardNumber);
// URL validation
public static boolean isUrl(CharSequence url);
public static boolean isIpv4(CharSequence ipv4);
public static boolean isIpv6(CharSequence ipv6);// Number validation
public static boolean isNumber(CharSequence str);
public static boolean isInteger(CharSequence str);
public static boolean isDouble(CharSequence str);
// String format validation
public static boolean isLetter(CharSequence value);
public static boolean isLetterUpper(CharSequence value);
public static boolean isLetterLower(CharSequence value);
public static boolean isChinese(CharSequence str);
public static boolean isWord(CharSequence value);Usage Examples:
// Validate user input
String email = "user@example.com";
boolean validEmail = Validator.isEmail(email); // true
String phone = "13812345678";
boolean validPhone = Validator.isMobile(phone); // true
String idCard = "110101199003077890";
boolean validId = Validator.isCitizenId(idCard); // depends on checksum
// Validate numeric input
String numberStr = "123.45";
boolean isNum = Validator.isNumber(numberStr); // true
boolean isInt = Validator.isInteger(numberStr); // false// Random strings
public static String randomString(int length);
public static String randomString(String baseString, int length);
public static String randomStringUpper(int length);
public static String randomNumbers(int length);
// Random numbers
public static int randomInt();
public static int randomInt(int min, int max);
public static long randomLong();
public static long randomLong(long min, long max);
public static double randomDouble();
public static double randomDouble(double min, double max);
// Random selection
public static <T> T randomEle(T[] array);
public static <T> T randomEle(List<T> list);
public static <T> List<T> randomEles(List<T> list, int count);// UUID generation
public static String randomUUID();
public static String simpleUUID();
public static String fastUUID();
public static String fastSimpleUUID();
// Snowflake ID (distributed unique ID)
public static long getSnowflakeNextId();
public static String getSnowflakeNextIdStr();
// Object ID (MongoDB style)
public static String objectId();Usage Examples:
// Generate random data
String sessionId = RandomUtil.randomString(32);
String captcha = RandomUtil.randomNumbers(6);
int randomPort = RandomUtil.randomInt(8000, 9000);
// Generate unique IDs
String uuid = IdUtil.randomUUID();
String simpleId = IdUtil.simpleUUID(); // No dashes
long snowflakeId = IdUtil.getSnowflakeNextId();
String objectId = IdUtil.objectId();
// Random selection
List<String> colors = Arrays.asList("red", "green", "blue", "yellow");
String randomColor = RandomUtil.randomEle(colors);
List<String> twoColors = RandomUtil.randomEles(colors, 2);// Class loading and inspection
public static Class<?> loadClass(String name);
public static boolean isPresent(String className);
public static <T> T newInstance(Class<T> clazz, Object... params);
// Method operations
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... paramTypes);
public static Object invoke(Object obj, String methodName, Object... args);
public static Object invokeStatic(Class<?> clazz, String methodName, Object... args);
// Field operations
public static Field getField(Class<?> clazz, String fieldName);
public static Object getFieldValue(Object obj, String fieldName);
public static void setFieldValue(Object obj, String fieldName, Object value);// Type checking
public static boolean isBasicType(Class<?> clazz);
public static boolean isWrapClass(Class<?> clazz);
public static boolean isPrimitiveWrapper(Class<?> clazz);
// Generic type operations
public static Type getTypeArgument(Type type);
public static Type getTypeArgument(Type type, int index);
public static Class<?> getClass(Type type);Usage Examples:
// Dynamic object creation
Class<?> userClass = ReflectUtil.loadClass("com.example.User");
Object user = ReflectUtil.newInstance(userClass, "John", 30);
// Dynamic method invocation
Object result = ReflectUtil.invoke(user, "getName");
ReflectUtil.invoke(user, "setAge", 31);
// Dynamic field access
String name = (String) ReflectUtil.getFieldValue(user, "name");
ReflectUtil.setFieldValue(user, "active", true);
// Check if class exists
boolean hasClass = ReflectUtil.isPresent("com.mysql.cj.jdbc.Driver");// JVM information
public static JavaInfo getJavaInfo();
public static JvmInfo getJvmInfo();
public static RuntimeInfo getRuntimeInfo();
// Host information
public static HostInfo getHostInfo();
public static OsInfo getOsInfo();
public static UserInfo getUserInfo();
// Memory information
public static long getTotalMemory();
public static long getFreeMemory();
public static long getUsedMemory();
public static long getMaxMemory();// Get system properties
public static String get(String key);
public static String get(String key, String defaultValue);
public static void set(String key, String value);
// Common properties
public static String getJavaHome();
public static String getUserHome();
public static String getUserDir();
public static String getTmpDir();
public static String getFileSeparator();
public static String getPathSeparator();
public static String getLineSeparator();Usage Examples:
// System information
JavaInfo javaInfo = SystemUtil.getJavaInfo();
System.out.println("Java Version: " + javaInfo.getVersion());
OsInfo osInfo = SystemUtil.getOsInfo();
System.out.println("OS: " + osInfo.getName() + " " + osInfo.getVersion());
// Memory monitoring
long usedMemory = SystemUtil.getUsedMemory();
long totalMemory = SystemUtil.getTotalMemory();
double memoryUsage = (double) usedMemory / totalMemory * 100;
System.out.println("Memory usage: " + memoryUsage + "%");
// System properties
String javaHome = SystemUtil.getJavaHome();
String userHome = SystemUtil.getUserHome();
String tmpDir = SystemUtil.getTmpDir();// Generate QR codes
public static BufferedImage generate(String content, int width, int height);
public static void generate(String content, int width, int height, File file);
public static String generateAsBase64(String content, int width, int height);
// Decode QR codes
public static String decode(File qrCodeFile);
public static String decode(BufferedImage qrCodeImage);// Create different types of captchas
public static LineCaptcha createLineCaptcha(int width, int height);
public static CircleCaptcha createCircleCaptcha(int width, int height);
public static ShearCaptcha createShearCaptcha(int width, int height);
public static GifCaptcha createGifCaptcha(int width, int height);Usage Examples:
// Generate QR code
String url = "https://hutool.cn";
QrCodeUtil.generate(url, 200, 200, new File("qrcode.png"));
// Generate captcha
LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100);
String code = captcha.getCode(); // Get the answer
captcha.write(new File("captcha.png")); // Save image
// Verify captcha
boolean verified = captcha.verify(userInputCode);// Coordinate system conversions
public static double[] wgs84ToGcj02(double lng, double lat);
public static double[] gcj02ToWgs84(double lng, double lat);
public static double[] gcj02ToBd09(double lng, double lat);
public static double[] bd09ToGcj02(double lng, double lat);
// Distance calculations
public static double distance(double lng1, double lat1, double lng2, double lat2);// Number parsing and formatting
public static Number parseNumber(String numberStr);
public static int parseInt(String numberStr);
public static long parseLong(String numberStr);
public static double parseDouble(String numberStr);
// Number validation
public static boolean isNumber(String str);
public static boolean isInteger(String str);
public static boolean isDouble(String str);
// Number comparison
public static boolean equals(Number num1, Number num2);
public static int compare(Number num1, Number num2);
// Number formatting
public static String decimalFormat(String format, Object value);
public static String formatPercent(double number, int decimalPlaces);// Basic math operations
public static double add(Number... numbers);
public static double subtract(Number num1, Number num2);
public static double multiply(Number... numbers);
public static double divide(Number num1, Number num2);
// Rounding operations
public static double roundUp(double value, int scale);
public static double roundDown(double value, int scale);
public static double round(double value, int scale);
// Range operations
public static boolean isIn(Number value, Number min, Number max);
public static Number max(Number... numbers);
public static Number min(Number... numbers);Usage Examples:
// Safe number parsing
String userInput = "123.45";
double value = NumberUtil.parseDouble(userInput); // Handles null and invalid formats
// Precise calculations (avoids floating point errors)
double result = NumberUtil.add(0.1, 0.2); // Returns exactly 0.3
double percentage = NumberUtil.formatPercent(0.1234, 2); // "12.34%"
// Number validation and comparison
boolean isNum = NumberUtil.isNumber("123.45");
boolean equal = NumberUtil.equals(123.0, 123); // true
// Geographic calculations
// Convert GPS coordinates between different systems
double[] wgs84 = {116.3974, 39.9093}; // Beijing in WGS84
double[] gcj02 = CoordinateUtil.wgs84ToGcj02(wgs84[0], wgs84[1]);
// Calculate distance between two points
double distance = CoordinateUtil.distance(116.3974, 39.9093, 121.4737, 31.2304); // Beijing to ShanghaiAll utility classes provide null-safe operations and handle edge cases gracefully. They follow consistent naming conventions and provide both basic and advanced functionality for common programming tasks.
Install with Tessl CLI
npx tessl i tessl/maven-cn-hutool--hutool-all