zoukankan      html  css  js  c++  java
  • java下划线与驼峰命名互转

    方式一:

    下划线与驼峰命名转换:

    1. public class Tool {
    2. private static Pattern linePattern = Pattern.compile("_(\w)");
    3. /** 下划线转驼峰 */
    4. public static String lineToHump(String str) {
    5. str = str.toLowerCase();
    6. Matcher matcher = linePattern.matcher(str);
    7. StringBuffer sb = new StringBuffer();
    8. while (matcher.find()) {
    9. matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
    10. }
    11. matcher.appendTail(sb);
    12. return sb.toString();
    13. }
    14. /** 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)}) */
    15. public static String humpToLine(String str) {
    16. return str.replaceAll("[A-Z]", "_$0").toLowerCase();
    17. }
    18. private static Pattern humpPattern = Pattern.compile("[A-Z]");
    19. /** 驼峰转下划线,效率比上面高 */
    20. public static String humpToLine2(String str) {
    21. Matcher matcher = humpPattern.matcher(str);
    22. StringBuffer sb = new StringBuffer();
    23. while (matcher.find()) {
    24. matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
    25. }
    26. matcher.appendTail(sb);
    27. return sb.toString();
    28. }
    29. public static void main(String[] args) {
    30. String lineToHump = lineToHump("f_parent_no_leader");
    31. System.out.println(lineToHump);// fParentNoLeader
    32. System.out.println(humpToLine(lineToHump));// f_parent_no_leader
    33. System.out.println(humpToLine2(lineToHump));// f_parent_no_leader
    34. }
    35. }

    不纠结""_"+matcher.group(0).toLowerCase()"的话,humpToLine2效率会比humpToLine高一些,看String#replaceAll方法源码即可。


    方式二:

    实体类:

    复制代码
     1 import java.io.Serializable;
     2 import lombok.AllArgsConstructor;
     3 import lombok.Data;
     4 import lombok.NoArgsConstructor;
     5 
     6 @Data
     7 @AllArgsConstructor
     8 @NoArgsConstructor
     9 public class User implements Serializable {
    10     /**
    11      * 
    12      */
    13     private static final long serialVersionUID = -329066647199569031L;
    14     
    15     private String userName;
    16     
    17     private String orderNo;
    18 }
    复制代码

    帮助类:

    复制代码
     1 import java.io.IOException;
     2 
     3 import com.fasterxml.jackson.annotation.JsonInclude.Include;
     4 import com.fasterxml.jackson.core.JsonProcessingException;
     5 import com.fasterxml.jackson.databind.ObjectMapper;
     6 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
     7 
     8 /**
     9  * JSON的驼峰和下划线互转帮助类
    10  * 
    11  * @author yangzhilong
    12  *
    13  */
    14 public class JsonUtils {
    15 
    16     /**
    17      * 将对象的大写转换为下划线加小写,例如:userName-->user_name
    18      * 
    19      * @param object
    20      * @return
    21      * @throws JsonProcessingException
    22      */
    23     public static String toUnderlineJSONString(Object object) throws JsonProcessingException{
    24         ObjectMapper mapper = new ObjectMapper();
    25         mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    26         mapper.setSerializationInclusion(Include.NON_NULL);      
    27         String reqJson = mapper.writeValueAsString(object);
    28         return reqJson;
    29     }
    30 
    31     /**
    32      * 将下划线转换为驼峰的形式,例如:user_name-->userName
    33      * 
    34      * @param json
    35      * @param clazz
    36      * @return
    37      * @throws IOException
    38      */
    39     public static <T> T toSnakeObject(String json, Class<T> clazz) throws IOException{
    40         ObjectMapper mapper = new ObjectMapper();
       // mapper的configure方法可以设置多种配置(例如:多字段 少字段的处理)
           //mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    41 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); 42 T reqJson = mapper.readValue(json, clazz); 43 return reqJson; 44 } 45 }
    复制代码

    单元测试类:

    复制代码
     1 import java.io.IOException;
     2 
     3 import org.junit.Test;
     4 
     5 import com.alibaba.fastjson.JSONObject;
     6 import com.fasterxml.jackson.core.JsonProcessingException;
     7 
     8 public class JsonTest {
     9     
    10     @Test
    11     public void testToUnderlineJSONString(){
    12         User user = new User("张三", "1111111");
    13         try {
    14             String json = JsonUtils.toUnderlineJSONString(user);
    15             System.out.println(json);
    16         } catch (JsonProcessingException e) {
    17             e.printStackTrace();
    18         }
    19     }
    20     
    21     @Test
    22     public void testToSnakeObject(){
    23         String json = "{"user_name":"张三","order_no":"1111111"}";
    24         try {
    25             User user = JsonUtils.toSnakeObject(json, User.class);
    26             System.out.println(JSONObject.toJSONString(user));
    27         } catch (IOException e) {
    28             e.printStackTrace();
    29         }
    30     }
    31 }
    复制代码

    测试结果:

    1 {"user_name":"张三","order_no":"1111111"}
    2 
    3 {"orderNo":"1111111","userName":"张三"}
  • 相关阅读:
    【2019年8月版本】OCP 071认证考试最新版本的考试原题-第4题
    【2019年8月版本】OCP 071认证考试最新版本的考试原题-第3题
    【2019年8月版本】OCP 071认证考试最新版本的考试原题-第2题
    【2019年8月版本】OCP 071认证考试最新版本的考试原题-第1题
    二分匹配题集
    004 IOC---IOC容器
    003 简单使用spring
    002 IOC--Bean创建的分析
    001 spring介绍
    012 shiro的jsp标签
  • 原文地址:https://www.cnblogs.com/zhuhui-site/p/10090880.html
Copyright © 2011-2022 走看看