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" ...
随机推荐
- js常见易错点
原文:http://www.jianshu.com/p/1c77853d4f01 前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函 ...
- HDU 1256 画8 (找规律)
题目链接 Problem Description 谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发. Input 输入的第一行为一个整数N,表示后面有N组数据. 每组数据中 ...
- python算法之近似熵、互近似熵算法
理论基础 近似熵? 定义:近似熵是一个随机复杂度,反应序列相邻的m个点所连成折线段的模式的互相近似的概率与由m+1个点所连成的折线段的模式相互近似的概率之差. 作用:用来描述复杂系统的不规则性,越是不 ...
- 用dom4j操作xml文件
XML的全称是eXtensible Markup Language,即“可扩展标记语言”.XML文件的作用主要是数据存储,文件配置,数据传输. html与xml的区别是:①html语法松散,xml语法 ...
- java基础8 构造函数和构造代码块
一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...
- mysql视图学习总结(转)
一.使用视图的理由是什么?1.安全性.一般是这样做的:创建一个视图,定义好该视图所操作的数据.之后将用户权限与视图绑定.这样的方式是使用到 了一个特性:grant语句可以针对视图进行授予权限.2.查询 ...
- GUC-3 模拟CAS算法
/* * 模拟 CAS 算法 */ public class TestCompareAndSwap { public static void main(String[] args) { final C ...
- 尝试 TFS Express 2012.3
之前一直使用SVN做版本管理,但是只能管理代码.之前的一份工作,只用了TFS来管理,可以将任务与代码集成管理,很是方便,只是安装太过于繁琐,现在的公司人少,不想费那么多事. 最关键的,就是安装TFS需 ...
- lr_get_attrib_string的使用
loadrunner controller 传递参数的一个方法: lr_get_attrib_string lang = lr_get_attrib_string("lang&quo ...
- Codeforces Round #491 (Div. 2) E - Bus Number + 反思
E - Bus Number 最近感觉打CF各种车祸.....感觉要反思一下, 上次读错题,这次想当然地以为18!肯定暴了longlong 而没有去实践, 这个题我看到就感觉是枚举每个数字的个数,但是 ...