Java中驼峰与下划线相互转换

1、驼峰命名法

/**
 * 驼峰式命名法
 */
public static String toCamelCase(String s) {
    if (s == null) {
        return null;
    }
    s = s.toLowerCase();
    StringBuilder sb = new StringBuilder(s.length());
    boolean upperCase = false;
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);

        if (c == "_") {
            upperCase = true;
        } else if (upperCase) {
            sb.append(Character.toUpperCase(c));
            upperCase = false;
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

例如:user_name -> userName

2、将下划线大写方式命名的字符串转换为驼峰式

/**
 * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串
 *
 * @param name 转换前的下划线大写方式命名的字符串
 * @return 转换后的驼峰式命名的字符串
 */
public static String convertToCamelCase(String name) {
    StringBuilder result = new StringBuilder();
    // 快速检查
    if (name == null || name.isEmpty()) {
        // 没必要转换
        return "";
    } else if (!name.contains("_")) {
        // 不含下划线,仅将首字母大写
        return name.substring(0, 1).toUpperCase() + name.substring(1);
    }
    // 用下划线将原始字符串分割
    String[] camels = name.split("_");
    for (String camel : camels) {
        // 跳过原始字符串中开头、结尾的下换线或双重下划线
        if (camel.isEmpty()) {
            continue;
        }
        // 首字母大写
        result.append(camel.substring(0, 1).toUpperCase());
        result.append(camel.substring(1).toLowerCase());
    }
    return result.toString();
}

例如:HELLO_WORLD -> HelloWorld

3、驼峰转下划线

/**
 * 下划线转驼峰命名
 */
public static String toUnderScoreCase(String str) {
    if (str == null) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    // 前置字符是否大写
    boolean preCharIsUpperCase = true;
    // 当前字符是否大写
    boolean curreCharIsUpperCase = true;
    // 下一字符是否大写
    boolean nexteCharIsUpperCase = true;
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (i > 0) {
            preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
        } else {
            preCharIsUpperCase = false;
        }

        curreCharIsUpperCase = Character.isUpperCase(c);

        if (i < (str.length() - 1)) {
            nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
        }

        if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) {
            sb.append("_");
        } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) {
            sb.append("_");
        }
        sb.append(Character.toLowerCase(c));
    }

    return sb.toString();
}

例如:HelloWorld -> hello_world

如您在阅读中发现不足,欢迎留言!!!

原创文章 107 获赞 650 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40065776/article/details/105977380