package com.estate.expert.admin.utils;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeParseException;
|
|
/**
|
* Excel 导入数据解析工具类
|
*
|
* 用于统一处理 Excel 导入时的数据解析,包括空值、异常处理等
|
*/
|
public class ExcelParseUtils {
|
|
/**
|
* 解析字符串,空值返回 null
|
*
|
* @param value 原始值
|
* @return 处理后的字符串,空值返回 null
|
*/
|
public static String parseString(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
return value.trim();
|
}
|
|
/**
|
* 解析字符串,空值返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 处理后的字符串
|
*/
|
public static String parseString(String value, String defaultValue) {
|
String result = parseString(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析整数,空值或解析失败返回 null
|
*
|
* @param value 原始值
|
* @return 解析后的整数,失败返回 null
|
*/
|
public static Integer parseInt(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
return Integer.parseInt(value.trim());
|
} catch (NumberFormatException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 解析整数,空值或解析失败返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 解析后的整数
|
*/
|
public static Integer parseInt(String value, Integer defaultValue) {
|
Integer result = parseInt(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析长整数,空值或解析失败返回 null
|
*
|
* @param value 原始值
|
* @return 解析后的长整数,失败返回 null
|
*/
|
public static Long parseLong(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
return Long.parseLong(value.trim());
|
} catch (NumberFormatException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 解析长整数,空值或解析失败返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 解析后的长整数
|
*/
|
public static Long parseLong(String value, Long defaultValue) {
|
Long result = parseLong(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析双精度浮点数,空值或解析失败返回 null
|
*
|
* @param value 原始值
|
* @return 解析后的双精度浮点数,失败返回 null
|
*/
|
public static Double parseDouble(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
return Double.parseDouble(value.trim());
|
} catch (NumberFormatException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 解析双精度浮点数,空值或解析失败返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 解析后的双精度浮点数
|
*/
|
public static Double parseDouble(String value, Double defaultValue) {
|
Double result = parseDouble(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析 BigDecimal,空值或解析失败返回 null
|
*
|
* @param value 原始值
|
* @return 解析后的 BigDecimal,失败返回 null
|
*/
|
public static BigDecimal parseBigDecimal(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
return new BigDecimal(value.trim());
|
} catch (NumberFormatException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 解析 BigDecimal,空值或解析失败返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 解析后的 BigDecimal
|
*/
|
public static BigDecimal parseBigDecimal(String value, BigDecimal defaultValue) {
|
BigDecimal result = parseBigDecimal(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析布尔值,空值或解析失败返回 null
|
* 支持:true/false, 是/否, 1/0, yes/no
|
*
|
* @param value 原始值
|
* @return 解析后的布尔值,失败返回 null
|
*/
|
public static Boolean parseBoolean(String value) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
String trimmed = value.trim().toLowerCase();
|
if ("true".equals(trimmed) || "是".equals(trimmed) || "1".equals(trimmed) || "yes".equals(trimmed)) {
|
return true;
|
}
|
if ("false".equals(trimmed) || "否".equals(trimmed) || "0".equals(trimmed) || "no".equals(trimmed)) {
|
return false;
|
}
|
return null;
|
}
|
|
/**
|
* 解析布尔值,空值或解析失败返回默认值
|
*
|
* @param value 原始值
|
* @param defaultValue 默认值
|
* @return 解析后的布尔值
|
*/
|
public static Boolean parseBoolean(String value, Boolean defaultValue) {
|
Boolean result = parseBoolean(value);
|
return result != null ? result : defaultValue;
|
}
|
|
/**
|
* 解析日期,空值或解析失败返回 null
|
* 默认格式:yyyy-MM-dd
|
*
|
* @param value 原始值
|
* @return 解析后的日期,失败返回 null
|
*/
|
public static LocalDate parseDate(String value) {
|
return parseDate(value, "yyyy-MM-dd");
|
}
|
|
/**
|
* 解析日期,支持自定义格式
|
*
|
* @param value 原始值
|
* @param pattern 日期格式
|
* @return 解析后的日期,失败返回 null
|
*/
|
public static LocalDate parseDate(String value, String pattern) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
return LocalDate.parse(value.trim(), formatter);
|
} catch (DateTimeParseException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 解析日期时间,空值或解析失败返回 null
|
* 默认格式:yyyy-MM-dd HH:mm:ss
|
*
|
* @param value 原始值
|
* @return 解析后的日期时间,失败返回 null
|
*/
|
public static LocalDateTime parseDateTime(String value) {
|
return parseDateTime(value, "yyyy-MM-dd HH:mm:ss");
|
}
|
|
/**
|
* 解析日期时间,支持自定义格式
|
*
|
* @param value 原始值
|
* @param pattern 日期时间格式
|
* @return 解析后的日期时间,失败返回 null
|
*/
|
public static LocalDateTime parseDateTime(String value, String pattern) {
|
if (value == null || value.trim().isEmpty()) {
|
return null;
|
}
|
try {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
return LocalDateTime.parse(value.trim(), formatter);
|
} catch (DateTimeParseException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 检查字符串是否为空(null 或空白)
|
*
|
* @param value 要检查的字符串
|
* @return 是否为空
|
*/
|
public static boolean isEmpty(String value) {
|
return value == null || value.trim().isEmpty();
|
}
|
|
/**
|
* 检查字符串是否非空
|
*
|
* @param value 要检查的字符串
|
* @return 是否非空
|
*/
|
public static boolean isNotEmpty(String value) {
|
return !isEmpty(value);
|
}
|
}
|