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

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

驼峰

背景

在日常开发过程中,驼峰与下划线的互相转换也是比较常见的操作。比如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();
    }

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值