本文目录导读:

我来详细介绍如何开发一个Java字符串工具类(StringUtils)的案例。
基础工具类结构
package com.example.util;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 字符串工具类
*/
public class StringUtils {
// 私有构造函数,防止实例化
private StringUtils() {
throw new UnsupportedOperationException("工具类不能实例化");
}
}
常用判空方法
/**
* 判断字符串是否为空
*/
public static boolean isEmpty(String str) {
return str == null || str.trim().length() == 0;
}
/**
* 判断字符串是否不为空
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
/**
* 判断字符串是否为空(包括空白字符)
*/
public static boolean isBlank(String str) {
return str == null || str.trim().isEmpty();
}
/**
* 判断字符串是否不为空
*/
public static boolean isNotBlank(String str) {
return !isBlank(str);
}
字符串转换方法
/**
* 首字母大写
*/
public static String capitalize(String str) {
if (isEmpty(str)) {
return str;
}
return Character.toUpperCase(str.charAt(0)) + str.substring(1);
}
/**
* 首字母小写
*/
public static String uncapitalize(String str) {
if (isEmpty(str)) {
return str;
}
return Character.toLowerCase(str.charAt(0)) + str.substring(1);
}
/**
* 转换为驼峰命名(下划线转驼峰)
*/
public static String toCamelCase(String str) {
if (isEmpty(str)) {
return str;
}
StringBuilder result = new StringBuilder();
boolean nextUpperCase = false;
for (char ch : str.toCharArray()) {
if (ch == '_') {
nextUpperCase = true;
} else if (nextUpperCase) {
result.append(Character.toUpperCase(ch));
nextUpperCase = false;
} else {
result.append(Character.toLowerCase(ch));
}
}
return result.toString();
}
/**
* 转换为下划线命名(驼峰转下划线)
*/
public static String toUnderlineCase(String str) {
if (isEmpty(str)) {
return str;
}
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isUpperCase(ch)) {
if (i > 0) {
result.append('_');
}
result.append(Character.toLowerCase(ch));
} else {
result.append(ch);
}
}
return result.toString();
}
字符串截取和填充
/**
* 截取字符串前n个字符
*/
public static String truncate(String str, int maxWidth) {
if (str == null) {
return null;
}
if (maxWidth < 0) {
return str;
}
if (str.length() <= maxWidth) {
return str;
}
return str.substring(0, maxWidth);
}
/**
* 左填充
*/
public static String leftPad(String str, int size, char padChar) {
if (str == null) {
return null;
}
int pads = size - str.length();
if (pads <= 0) {
return str;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pads; i++) {
sb.append(padChar);
}
sb.append(str);
return sb.toString();
}
/**
* 右填充
*/
public static String rightPad(String str, int size, char padChar) {
if (str == null) {
return null;
}
int pads = size - str.length();
if (pads <= 0) {
return str;
}
StringBuilder sb = new StringBuilder(str);
for (int i = 0; i < pads; i++) {
sb.append(padChar);
}
return sb.toString();
}
字符串校验方法
/**
* 是否为数字
*/
public static boolean isNumeric(String str) {
if (isEmpty(str)) {
return false;
}
return str.matches("-?\\d+(\\.\\d+)?");
}
/**
* 是否为整数
*/
public static boolean isInteger(String str) {
if (isEmpty(str)) {
return false;
}
try {
Integer.parseInt(str.trim());
return true;
} catch (NumberFormatException e) {
return false;
}
}
/**
* 是否为有效的邮箱地址
*/
public static boolean isValidEmail(String email) {
if (isEmpty(email)) {
return false;
}
String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
Pattern pattern = Pattern.compile(emailRegex);
return pattern.matcher(email).matches();
}
/**
* 是否为有效的手机号(中国大陆)
*/
public static boolean isValidMobile(String mobile) {
if (isEmpty(mobile)) {
return false;
}
String mobileRegex = "^1[3-9]\\d{9}$";
Pattern pattern = Pattern.compile(mobileRegex);
return pattern.matcher(mobile).matches();
}
字符串处理高级方法
/**
* 去除所有空格
*/
public static String removeAllSpaces(String str) {
if (isEmpty(str)) {
return str;
}
return str.replaceAll("\\s+", "");
}
/**
* 去除指定字符
*/
public static String removeChar(String str, char removeChar) {
if (isEmpty(str)) {
return str;
}
StringBuilder sb = new StringBuilder();
for (char ch : str.toCharArray()) {
if (ch != removeChar) {
sb.append(ch);
}
}
return sb.toString();
}
/**
* 字符串反转
*/
public static String reverse(String str) {
if (isEmpty(str)) {
return str;
}
return new StringBuilder(str).reverse().toString();
}
/**
* 重复字符串
*/
public static String repeat(String str, int count) {
if (str == null || count <= 0) {
return "";
}
StringBuilder sb = new StringBuilder(str.length() * count);
for (int i = 0; i < count; i++) {
sb.append(str);
}
return sb.toString();
}
/**
* 统计子字符串出现次数
*/
public static int countMatches(String str, String sub) {
if (isEmpty(str) || isEmpty(sub)) {
return 0;
}
int count = 0;
int idx = 0;
while ((idx = str.indexOf(sub, idx)) != -1) {
count++;
idx += sub.length();
}
return count;
}
/**
* 隐藏敏感信息(如手机号、邮箱)
*/
public static String maskInfo(String str, int start, int end, char maskChar) {
if (isEmpty(str)) {
return str;
}
if (start < 0 || end > str.length() || start >= end) {
return str;
}
StringBuilder sb = new StringBuilder(str);
for (int i = start; i < end; i++) {
sb.setCharAt(i, maskChar);
}
return sb.toString();
}
测试类示例
package com.example.test;
import com.example.util.StringUtils;
public class StringUtilsTest {
public static void main(String[] args) {
// 测试判空方法
System.out.println("isEmpty测试:");
System.out.println(StringUtils.isEmpty(null)); // true
System.out.println(StringUtils.isEmpty("")); // true
System.out.println(StringUtils.isEmpty(" ")); // true
System.out.println(StringUtils.isEmpty("hello")); // false
System.out.println("\nisBlank测试:");
System.out.println(StringUtils.isBlank(" ")); // true
System.out.println(StringUtils.isBlank("\t\n")); // true
// 测试驼峰转换
System.out.println("\n驼峰转换测试:");
System.out.println(StringUtils.toCamelCase("hello_world")); // helloWorld
System.out.println(StringUtils.toUnderlineCase("helloWorld")); // hello_world
// 测试填充
System.out.println("\n填充测试:");
System.out.println(StringUtils.leftPad("5", 3, '0')); // 005
System.out.println(StringUtils.rightPad("5", 3, '0')); // 500
// 测试校验
System.out.println("\n校验测试:");
System.out.println(StringUtils.isNumeric("123.45")); // true
System.out.println(StringUtils.isValidEmail("test@example.com")); // true
System.out.println(StringUtils.isValidMobile("13800138000")); // true
// 测试处理
System.out.println("\n处理测试:");
System.out.println(StringUtils.reverse("Hello")); // olleH
System.out.println(StringUtils.repeat("abc", 3)); // abcabcabc
System.out.println(StringUtils.countMatches("hello hello", "hello")); // 2
// 测试信息隐藏
System.out.println("\n信息隐藏测试:");
String phone = "13812345678";
System.out.println(StringUtils.maskInfo(phone, 3, 7, '*')); // 138****5678
}
}
使用示例
// 在实际项目中使用
public class UserService {
public boolean createUser(String name, String email, String phone) {
// 参数校验
if (StringUtils.isEmpty(name)) {
throw new IllegalArgumentException("用户名不能为空");
}
if (!StringUtils.isValidEmail(email)) {
throw new IllegalArgumentException("邮箱格式不正确");
}
if (!StringUtils.isValidMobile(phone)) {
throw new IllegalArgumentException("手机号格式不正确");
}
// 格式化数据
String userName = StringUtils.capitalize(name.toLowerCase());
// 记录日志(隐藏敏感信息)
String safePhone = StringUtils.maskInfo(phone, 3, 7, '*');
System.out.println("创建用户:" + userName + ", 手机:" + safePhone);
return true;
}
}
这个工具类包含了日常开发中常用的字符串处理功能,你可以根据项目需求进行扩展或修改,建议使用单元测试框架(如JUnit)来编写更完善的测试。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播