【java基础-实战1】字符串的驼峰与下划线互转
  FTGOknwdYkLB 2023年11月02日 74 0

【java基础-实战1】字符串的驼峰与下划线互转_System

背景

在日常开发过程中,驼峰与下划线的互相转换也是比较常见的操作。比如db中表的列名是一划线命名,而java实体命名则是驼峰格式命名。 下面将介绍几种驼峰与下划线互转的实现方式。

1. Gauva:CaseFormat类

// 驼峰转下划线
String ans = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "helloWorld"); 
System.out.println(ans); //hello_world

// 下划线转驼峰
String ans2 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "hello_world"); 
System.out.println(ans2); //helloWorld

注意
驼峰转下划线,一般指将大写字母转小写,并将大写字母前面加上下划线;
下线线转驼峰,一般指将下划线去掉,并将下划线后面的一个字母转为大写。
所以,对于不规则的输入,如helloworldCase, 驼峰转下划线一般会转成:helloworld_case; 对于helloworld_case,下划线转驼峰一般会转成helloworldCase

2.Hutool: StrUtil类

除了上面的guava,hutool的使用也非常广,其中包含很多工具类,其 StrUtil 也提供了下划线与 驼峰的互转支持

//下划线转驼峰
String ans = StrUtil.toCamelCase("hello_world");
System.out.println(ans); //helloWorld

//驼峰转下划线
String ans2 = StrUtil.toUnderlineCase("helloWorld"); System.out.println(ans2); //hello_world

3.自定义实现

3.1 驼峰转下划线

关键点:大写字母,则前位补一个下划线,当前字符转小写(如果前面已经是一个下划线了, 那前面不补,直接转小写即可)

public static String toUnderCase(String name) {
    if (name == null) {
        return null; 
    }
    int len = name.length();
    StringBuilder res = new StringBuilder(len + 2); 
    char pre = 0;
    for (int i = 0; i < len; i++){ 
        char ch = name.charAt(i);
        if (Character.isUpperCase(ch)) { 
            if (pre != UNDER_LINE) {
                res.append(UNDER_LINE); 
            }
        res.append(Character.toLowerCase(ch)); 
        } else {
            res.append(ch); 
            
        }
        pre = ch; 
    }
    return res.toString(); 
     
 }

3.2 下划线转驼峰

关键点:找到下划线,然后去掉它,下一个字符转大写续上(如果下一个还是下划线,那 继续找下一个)

private static final char UNDER_LINE = '_';
    
    /**
     * 下划线转驼峰 *
     *
     * @param name * @return
     */
    public static String toCamelCase(String name) {
        if (null == name || name.length() == 0) {
            return null;
        }
        int length = name.length();
        StringBuilder sb = new StringBuilder(length);
        boolean underLineNextChar = false;
        for (int i = 0; i < length; ++i) {
            char c = name.charAt(i);
            if (c == UNDER_LINE) {
                underLineNextChar = true;
            } else if (underLineNextChar) {
                sb.append(Character.toUpperCase(c));
                underLineNextChar = false;
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
FTGOknwdYkLB