Java常用工具类方法详解及使用案例

发布于:2025-06-06 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、前言

在Java开发中,工具类(Utility Classes)是我们日常编码中不可或缺的一部分。它们通常包含静态方法,用于执行各种通用任务,如字符串处理、日期操作、集合操作等。本文将详细介绍几个常用工具类的主要方法及其使用案例。

二、Apache Commons Lang3工具类

1. StringUtils

StringUtils 是处理字符串的利器,比JDK自带的String类提供了更多实用的方法。

常用方法:

// 判断字符串是否为空(包括null和"")
StringUtils.isEmpty(str); 

// 判断字符串是否为空白(包括null、""和"  ")
StringUtils.isBlank(str);

// 截取字符串
StringUtils.substring(str, start, end);

// 拼接字符串
StringUtils.join(array, separator);

// 重复字符串
StringUtils.repeat(str, count);

// 判断字符串是否包含某字符
StringUtils.contains(str, searchStr);

// 删除空白字符
StringUtils.deleteWhitespace(str);

使用案例:

// 检查字符串是否为空
if (StringUtils.isBlank(input)) {
    System.out.println("输入不能为空");
}

// 安全地截取字符串
String result = StringUtils.substring("Hello World", 0, 5); // "Hello"

// 拼接数组元素
String joined = StringUtils.join(new String[]{"a", "b", "c"}, ","); // "a,b,c"

2. ArrayUtils

ArrayUtils 提供了数组操作的便捷方法。

常用方法:

// 判断数组是否为空
ArrayUtils.isEmpty(array);

// 添加元素到数组
ArrayUtils.add(array, element);

// 合并数组
ArrayUtils.addAll(array1, array2);

// 查找元素索引
ArrayUtils.indexOf(array, value);

// 反转数组
ArrayUtils.reverse(array);

使用案例:

// 安全地检查数组
int[] arr = {1, 2, 3};
if (ArrayUtils.isNotEmpty(arr)) {
    System.out.println("数组不为空");
}

// 添加元素
int[] newArr = ArrayUtils.add(arr, 4); // [1, 2, 3, 4]

// 查找元素位置
int index = ArrayUtils.indexOf(arr, 2); // 1

三、Google Guava工具类

1. Preconditions

Preconditions 提供了参数校验的便捷方法。

常用方法:

// 检查参数是否为true
Preconditions.checkArgument(boolean);

// 检查对象是否不为null
Preconditions.checkNotNull(T);

// 检查状态
Preconditions.checkState(boolean);

// 带错误信息的检查
Preconditions.checkArgument(boolean, errorMsg);

使用案例:

public void process(String input, int count) {
    // 校验参数
    Preconditions.checkArgument(count > 0, "count必须大于0");
    Preconditions.checkNotNull(input, "input不能为null");
    
    // 业务逻辑...
}

2. Joiner 和 Splitter

Joiner 使用案例:

// 简单拼接
String result = Joiner.on(",").join("a", "b", "c"); // "a,b,c"

// 跳过null值
String result = Joiner.on(";").skipNulls().join("a", null, "b"); // "a;b"

// 处理map
Map<String, String> map = ImmutableMap.of("k1", "v1", "k2", "v2");
String mapStr = Joiner.on(",").withKeyValueSeparator("=").join(map); // "k1=v1,k2=v2"

Splitter 使用案例:

// 简单分割
Iterable<String> parts = Splitter.on(',').split("a,b,c"); // ["a", "b", "c"]

// 去除空格
Iterable<String> parts = Splitter.on(',').trimResults().split("a, b, c"); // ["a", "b", "c"]

// 限制分割次数
Iterable<String> parts = Splitter.on(',').limit(2).split("a,b,c"); // ["a", "b,c"]

四、日期时间工具类

1. Java 8的DateTimeFormatter

// 日期格式化
LocalDate date = LocalDate.now();
String formatted = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

// 日期解析
LocalDate parsedDate = LocalDate.parse("2023-05-20", DateTimeFormatter.ISO_DATE);

// 自定义格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String chineseDate = date.format(formatter);

2. DateUtils (Apache Commons Lang3)

// 日期加减
Date newDate = DateUtils.addDays(new Date(), 5); // 加5天
Date newDate = DateUtils.addMonths(new Date(), 1); // 加1个月

// 日期截断(去掉时分秒)
Date truncated = DateUtils.truncate(new Date(), Calendar.DATE);

// 判断是否为同一天
boolean sameDay = DateUtils.isSameDay(date1, date2);

五、集合工具类

1. Collections (JDK自带)

// 排序
Collections.sort(list);

// 反转
Collections.reverse(list);

// 查找最大最小值
Collections.max(collection);
Collections.min(collection);

// 安全空集合
List<String> emptyList = Collections.emptyList();
Map<String, String> emptyMap = Collections.emptyMap();

// 不可变集合
List<String> unmodifiableList = Collections.unmodifiableList(list);

2. Lists/Sets/Maps (Guava)

// 创建集合
List<String> list = Lists.newArrayList("a", "b", "c");
Set<String> set = Sets.newHashSet("a", "b", "c");
Map<String, String> map = Maps.newHashMap();

// 集合操作
Set<String> union = Sets.union(set1, set2); // 并集
Set<String> intersection = Sets.intersection(set1, set2); // 交集
Set<String> difference = Sets.difference(set1, set2); // 差集

// 列表分区
List<List<String>> partitions = Lists.partition(bigList, 100); // 每100个一组

六、IO工具类

1. IOUtils (Apache Commons IO)

// 读取文件内容
String content = IOUtils.toString(inputStream, "UTF-8");

// 复制流
IOUtils.copy(inputStream, outputStream);

// 关闭流
IOUtils.closeQuietly(inputStream); // 静默关闭,不抛异常

// 读取所有行
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");

2. FileUtils (Apache Commons IO)

// 读取文件内容
String content = FileUtils.readFileToString(file, "UTF-8");

// 写入文件
FileUtils.writeStringToFile(file, content, "UTF-8");

// 复制文件/目录
FileUtils.copyFile(srcFile, destFile);
FileUtils.copyDirectory(srcDir, destDir);

// 删除目录
FileUtils.deleteDirectory(dir);

// 文件比较
boolean isSame = FileUtils.contentEquals(file1, file2);

七、JSON处理工具类

1. Jackson的ObjectMapper

ObjectMapper mapper = new ObjectMapper();

// 对象转JSON
String json = mapper.writeValueAsString(obj);

// JSON转对象
MyClass obj = mapper.readValue(json, MyClass.class);

// JSON转Map
Map<String, Object> map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {});

// 美化输出
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);

2. Gson

Gson gson = new Gson();

// 对象转JSON
String json = gson.toJson(obj);

// JSON转对象
MyClass obj = gson.fromJson(json, MyClass.class);

// 复杂类型处理
Type listType = new TypeToken<List<MyClass>>() {}.getType();
List<MyClass> list = gson.fromJson(json, listType);

八、总结

工具类可以极大提高我们的开发效率,避免重复造轮子。本文介绍的工具类只是冰山一角,实际开发中还有更多优秀的工具库可供选择。在使用时需要注意:

  1. 根据项目需求选择合适的工具库
  2. 注意工具库的版本兼容性
  3. 对于简单需求,优先考虑JDK自带方法
  4. 合理封装常用工具方法,形成项目自己的工具类

希望本文能帮助大家更好地理解和使用Java中的各种工具类,提高开发效率和代码质量。


网站公告

今日签到

点亮在社区的每一天
去签到