All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.openyuan.jpa.common.util.StringUtils Maven / Gradle / Ivy

package top.openyuan.jpa.common.util;


import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.helpers.MessageFormatter;

/**
 * 字符串操作的工具类.
 *
 * @author lzy on 2019-08-04.
 * @since v1.0.0
 */
public final class StringUtils {

    /**
     * 替换空格、换行符、制表符等为一个空格的预编译正则表达式模式对象.
     */
    private static final Pattern BLANK_PATTERN = Pattern.compile("\\|\t|\r|\n");

    private static final String PATTERN_WHERE_AND_OR_BLANK = "(?i) WHERE AND | WHERE OR ";

    private static final String WHERE = " WHERE ";

    private static final String WHERE_PREV_SPACE = " WHERE";

    /**
     * XML文件扩展名常量.
     */
    private static final String XML_EXT = ".xml";

    /**
     * Java文件扩展名常量.
     */
    private static final String JAVA_EXT = ".java";

    /**
     * Java 编译后的 class 文件扩展名.
     */
    private static final String CLASS_EXT = ".class";

    /**
     * 将字符串中的“大空格(包括换行、回车、制表符)”等转成普通空格来处理,最后去掉所有多余空格.
     *
     * @param str 待处理的字符串
     * @return 替换后的字符串
     */
    public static String replaceBlank(String str) {
        Matcher m = BLANK_PATTERN.matcher(str);
        return m.replaceAll("").replaceAll("\\s{2,}", " ").trim();
    }

    /**
     * 替换 SQL 字符串中的 {@code WHERE AND} 或者 {@code WHERE OR} 等字符串为 {@code WHERE},且查找时忽略大小写.
     *
     * @param s 待替换的原字符串
     * @return 替换后的总字符串
     * @author lzy on 2020-12-31.
     * @since v2.4.1
     */
    public static String replaceWhereAndOr(String s) {
        s = s.replaceAll(PATTERN_WHERE_AND_OR_BLANK, WHERE)
                .replaceAll("(?i) WHERE ORDER BY ", " ORDER BY ")
                .replaceAll("(?i) WHERE GROUP BY ", " GROUP BY ");
        if (s.endsWith(WHERE_PREV_SPACE)) {
            s = s.substring(0, s.lastIndexOf(WHERE_PREV_SPACE));
        }
        return s;
    }

    /**
     * 判断对象是否是空的.
     *
     * @param o 对象
     * @return 布尔值
     */
    public static boolean isEmptyObject(Object o) {
        return o == null || ((o instanceof String) && isBlank((String) o));
    }

    /**
     * 判断给定的字符串是否为空字符串,包括空格也算.
     *
     * @param str 待判断字符串
     * @return 是否的布尔结果
     */
    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }

        // 遍历每个空格是否有非空格元素
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断字符串是否为空.
     *
     * @param str 待判断字符串
     * @return 是否的布尔结果
     */
    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    /**
     * 使用 Slf4j 中的字符串格式化方式来格式化字符串.
     *
     * @param pattern 待格式化的字符串
     * @param args 参数
     * @return 格式化后的字符串
     */
    public static String format(String pattern, Object... args) {
        return pattern == null ? "" : MessageFormatter.arrayFormat(pattern, args).getMessage();
    }

    /**
     * 快速连接参数中的字符串.
     *
     * @param objs 各对象参数
     * @return 连接后的字符串
     */
    public static String concat(Object... objs) {
        StringBuilder sb = new StringBuilder();
        for (Object o : objs) {
            sb.append(o == null ? "" : o.toString());
        }
        return sb.toString();
    }

    /**
     * 判断文件全路径是否是已某扩展名结尾的文件.
     *
     * @param filePath 文件全路径名
     * @param ext 文件扩展名
     * @return 布尔值
     */
    private static boolean isExtFile(String filePath, String ext) {
        return filePath != null && filePath.endsWith(ext);
    }

    /**
     * 根据给定的文件路径判断文件是否是 XML 文件.
     *
     * @param filePath 文件路径
     * @return 布尔值
     */
    public static boolean isXmlFile(String filePath) {
        return isExtFile(filePath, XML_EXT);
    }

    /**
     * 根据给定的文件路径判断文件是否是 .java 文件.
     *
     * @param filePath 文件路径
     * @return 布尔值
     */
    public static boolean isJavaFile(String filePath) {
        return isExtFile(filePath, JAVA_EXT);
    }

    /**
     * 根据给定的文件路径判断文件是否是 .class 文件.
     *
     * @param filePath 文件路径
     * @return 布尔值
     */
    public static boolean isClassFile(String filePath) {
        return isExtFile(filePath, CLASS_EXT);
    }

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy