java下划线与驼峰命名互转
方式一:
下划线与驼峰命名转换:
-
public class Tool {
-
private static Pattern linePattern = Pattern.compile("_(\\w)");
-
-
/** 下划线转驼峰 */
-
public static String lineToHump(String str) {
-
str = str.toLowerCase();
-
Matcher matcher = linePattern.matcher(str);
-
StringBuffer sb = new StringBuffer();
-
while (matcher.find()) {
-
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
-
}
-
matcher.appendTail(sb);
-
return sb.toString();
-
}
-
-
/** 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)}) */
-
public static String humpToLine(String str) {
-
return str.replaceAll("[A-Z]", "_$0").toLowerCase();
-
}
-
-
private static Pattern humpPattern = Pattern.compile("[A-Z]");
-
-
/** 驼峰转下划线,效率比上面高 */
-
public static String humpToLine2(String str) {
-
Matcher matcher = humpPattern.matcher(str);
-
StringBuffer sb = new StringBuffer();
-
while (matcher.find()) {
-
matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
-
}
-
matcher.appendTail(sb);
-
return sb.toString();
-
}
-
-
public static void main(String[] args) {
-
String lineToHump = lineToHump("f_parent_no_leader");
-
System.out.println(lineToHump);// fParentNoLeader
-
System.out.println(humpToLine(lineToHump));// f_parent_no_leader
-
System.out.println(humpToLine2(lineToHump));// f_parent_no_leader
-
}
-
}
不纠结""_"+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":"张三"}
</div>
java下划线与驼峰命名互转的更多相关文章
- JAVA下划线、驼峰相互转换
/** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...
- MyBatis Generator 下划线转驼峰命名
MyBatis Generator配置文件--指定生成实体类使用实际的表列名作为实体类的属性名 table标签下的设置属性useActualColumnNames用于指定生成实体类时是否使用实际的列名 ...
- mybatis会自动把字段名中的下划线转为驼峰命名法?
先看一下转化的调用堆栈: 代码如下: 上面代码只是去掉了下划线,并没有首字母小写变大写的代码.再跟进findProperty方法可以找到获取驼峰结果的代码如下: 可以看出通过reflector.fin ...
- Java Json 数据下划线与驼峰格式进行相互转换
概述 今天遇见一个需求,需要对json数据进行下划线与驼峰格式之间进行转换,在Fastjson.Jackson.Gson都提供了转换的方式,在这里进行一下列举. User类: public class ...
- hibernate 或jpa 中使用 AliasToBeanResultTransformer 自定义类型转换ResultTransformer 下划线转驼峰
jpa中使用 sql查询时,返回结果直接转为实体bean的实现, 需要自定义一个ResultTransformer,如下, import java.util.Arrays; import org.ap ...
- Mybatis 结果映射下划线转驼峰
mybatis 结果映射下划线转驼峰 Spring Boot 配置: #下划线转驼峰 mybatis.configuration.map-underscore-to-camel-case=true m ...
- python 下划线转驼峰
# 下划线转驼峰 def str2Hump(text): arr = filter(None, text.lower().split('_')) res = '' j = 0 for i in arr ...
- 如何将Map键值的下划线转为驼峰
本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何将Map键值的下划线转为驼峰: 例,将HashMap实例extMap键值下划线转为驼峰: 代码: HashMap<String ...
- mybatis 下划线转驼峰配置
一直以来,在sqlmap文件中,对于数据库中的下划线字段转驼峰,我们都是通过resultmap来做的,如下: <resultMap id="ISTableStatistics" ...
随机推荐
- 牛客网习题剑指offer之数值的整数次方
分析: 要考虑到exponent为0和负数的情况. 如果base是0并且exponent是负数的时候呢?那就发生除0的情况了. AC代码: public class Solution { public ...
- 人脸识别如何做到one-shot learning?(转)
来源:http://blog.csdn.net/ice_actor/article/details/78603042 1.什么是人脸识别 这部分演示了百度总部大楼的人脸识别系统,员工刷脸进出办公区 ...
- python中赋值、浅拷贝、深拷贝详解(转)
一.赋值 >>> a = [1, 2, 3]>>> b = a>>> print(id(a), id(b), sep='\n')139701469 ...
- 14 - 函数参数检测-inspect模块
目录 1 python类型注解 2 函数定义的弊端 3 函数文档 4 函数注解 4.1 annotation属性 5 inspect模块 5.1 常用方法 5.2 signature类 5.3 par ...
- Tutorial 5: Relationships & Hyperlinked APIs
转载自:http://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/ Tutorial 5: ...
- IP负载均衡技术
参考链接:http://www.360doc.com/content/12/1117/19/820209_248442094.shtml
- htaccess附录:正则表达式、重定向代码
.htaccess正则表达式 # 位于行首时表示注释. [F] Forbidden(禁止): 命令服务器返回 403 Forbidden错误给用户浏览器 [L] Last rule(最后一条规则): ...
- Java基础1,入门基础知识
本文知识点(目录): 1.java简介 2.环境的搭建 3.关键字 4.标识符 5.注释 6.常量 7.进制的转换 8.变量 9.数据类型的转换 ...
- hbase学习(一)hbase简介
1.hadoop生态系统 2.hbase简介 非关系型数据库知识面扩展 cassandra.hbase.mongodb.redis couchdb,文件存储数据库 Neo4j非关系型图数据库 3.hb ...
- 编译报错:LC.exe 已退出