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" ...
随机推荐
- 信息收集之zoomeye
一.浏览器上使用api接口 1.https://api.zoomeye.org/user/login post传参:{"username" : "username&quo ...
- 2017ACM暑期多校联合训练 - Team 2 1009 HDU 60563 TrickGCD (容斥公式)
题目链接 Problem Description You are given an array A , and Zhu wants to know there are how many differe ...
- NYOJ 221 Tree (二叉树)
题目链接 描述 Little Valentine liked playing with binary trees very much. Her favorite game was constructi ...
- 基于Node的Web聊天室
1 项目名称 Web聊天室(<这是NodeJs实战>第二章的一个案例,把整个开发过程记录下来)
- 项目开发 -- ZFS容量分配
存储池 allocated 池中已实际分配的存储空间量.该属性也可通过其简短列名alloc来引用. capacity 已用的池空间百分比.此属性也可通过其简短列名cap来引用. dedupratio ...
- php菜刀分析学习
这里以eval为例 我们知道, php中的eval能把字符串当代码执行: eval('phpcode'); 注意, 这里的代码要有分号结尾, 我们测试: 我们创建一个最简单的SHELL: <?p ...
- Linux kernel学习-内存管理
转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...
- 内存不够清理方法,costdown项目时如果裁剪不下来,也可以参考
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...
- kvm命令参数记录
/usr/libexec/qemu-kvm -cpu host -m 1024 -enable-kvm -drive file=/var/lib/libvirt/images/zxc_linux1.i ...
- SICP第三章题解
目录 SICP第三章题解 ex3-17 ex3-18 ex3-19 队列 ex3-21 ex3-22 ex3-24 ex3-25 3.4 并发:时间是一个本质问题 ex3-38 3.4.2 控制并发的 ...