zoukankan      html  css  js  c++  java
  • 【原创】字符串工具类--驼峰法与下划线法互转

    在实际项目开发中,会碰到这样的问题,数据库表结构设计好了,可实体类还没相应地弄出来。实体类的属性命名方法一般是驼峰法,而数据库中的表字段命名方法用的是下划线法。如果表的字段非常多,我们根据设计好的数据库字段再手动敲写一遍驼峰法的属性,这有点费时了。如何迅速地把数据库中的表字段变成我们所需要的驼峰式的属性呢?

    解决方法有二,一是通过文本编辑工具,如EditPlus,Notepad++等,利用它们携带的正则替换功能来迅速实现;二是通过自己编写工具类来实现。至于第一种方法操作技巧,不在这边赘述。第二种方法如下:

    以下是自己编写的工具类的代码:

    package day0704;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 驼峰法-下划线互转
     * @author cshaper
     * @since 2015.07.04
     * @version 1.0.0
     */
    public class Underline2Camel {
        
        /**
         * 下划线转驼峰法
         * @param line 源字符串
         * @param smallCamel 大小驼峰,是否为小驼峰
         * @return 转换后的字符串
         */
        public static String underline2Camel(String line,boolean smallCamel){
            if(line==null||"".equals(line)){
                return "";
            }
            StringBuffer sb=new StringBuffer();
            Pattern pattern=Pattern.compile("([A-Za-z\d]+)(_)?");
            Matcher matcher=pattern.matcher(line);
            while(matcher.find()){
                String word=matcher.group();
                sb.append(smallCamel&&matcher.start()==0?Character.toLowerCase(word.charAt(0)):Character.toUpperCase(word.charAt(0)));
                int index=word.lastIndexOf('_');
                if(index>0){
                    sb.append(word.substring(1, index).toLowerCase());
                }else{
                    sb.append(word.substring(1).toLowerCase());
                }
            }
            return sb.toString();
        }
        /**
         * 驼峰法转下划线
         * @param line 源字符串
         * @return 转换后的字符串
         */
        public static String camel2Underline(String line){
            if(line==null||"".equals(line)){
                return "";
            }
            line=String.valueOf(line.charAt(0)).toUpperCase().concat(line.substring(1));
            StringBuffer sb=new StringBuffer();
            Pattern pattern=Pattern.compile("[A-Z]([a-z\d]+)?");
            Matcher matcher=pattern.matcher(line);
            while(matcher.find()){
                String word=matcher.group();
                sb.append(word.toUpperCase());
                sb.append(matcher.end()==line.length()?"":"_");
            }
            return sb.toString();
        }
        public static void main(String[] args) {
            String line="I_HAVE_AN_IPANG3_PIG";
            String camel=underline2Camel(line,true);
            System.out.println(camel);
            System.out.println(camel2Underline(camel));
        }
    }

    运行结果如下:

    iHaveAnIpang3Pig
    I_HAVE_AN_IPANG3_PIG

    从娃抓起学抓娃
  • 相关阅读:
    perl 获取铜板街页码
    $response->decoded_content 和$response->content
    基于Netty5.0高级案例之请求响应同步通信
    [Err] 1091
    [Err] 23000
    [Err] 42000
    perl 爬取 find_by_tag_name
    perl 爬取html findvalues 方法
    perl 安装DBI和DBD
    js setTimeout 参数传递使用介绍
  • 原文地址:https://www.cnblogs.com/javasharp/p/4622413.html
Copyright © 2011-2022 走看看