# 一.需求背景
# 1.背景
驼峰和下划线互转场景是在不同命名规范的情况下,需要进行字段名称的转换。例如,Java 中使用驼峰命名规范,而数据库表字段通常使用下划线命名规范。
# 2.实现方式
- 使用 GuavaAPI 实现
- 使用 hutool 工具类实现
- 使用自定义的工具实现
- 使用正则表达式实现
# 3.注意事项
对于驼峰和下划线的互转,需要注意以下几点:
- 确定转换方向:在进行驼峰和下划线的互转时,首先需要确定是将驼峰转为下划线,还是将下划线转为驼峰。
- 字符串格式:要进行驼峰和下划线的转换,需要保证字符串的格式符合规范。驼峰命名法中,单词间没有分隔符,首字母小写;下划线命名法中,单词间使用下划线分隔,全小写。
- 字符串处理:对于将驼峰转为下划线,可以使用正则表达式或字符串处理方法,将大写字母前插入下划线,并将字符串转为小写。对于将下划线转为驼峰,可以使用字符串处理方法,将下划线后的字母转为大写,并去掉下划线。
- 命名规范:在进行驼峰和下划线的互转时,要遵循统一的命名规范,以保证代码的可读性和一致性。
- 注意冲突:在进行驼峰和下划线的互转时,要注意可能存在的命名冲突。有些字符串可能无法准确转换为驼峰或下划线命名,可能会引起命名冲突或歧义。
在进行驼峰和下划线的互转时,要谨慎处理,遵循规范,确保转换的准确性和可靠性。
# 二.实现方式
# 1.Guava 实现
Gauva:
//驼峰转下划线
String ans = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "helloWorld");
System.out.println(ans);
//下划线转驼峰
String ans2 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "hello_world");
System.out.println(ans2);
1
2
3
4
5
6
2
3
4
5
6
实战:
//排序:驼峰转下划线
String sortname = query.getSortname();
if (StringUtils.isNotEmpty(sortname)) {
try {
BrandStoreSkuInvSalRateWeekDTO.class.getField(sortname);
sortname = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sortname);
query.setSortname(sortname);
} catch (NoSuchFieldException e) {
log.error("排序字段不存在,排序字段为{}", sortname);
query.setSortname(null);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 2.hutool 实现
Hutool:
String ans = StrUtil.toCamelCase("hello_world");
System.out.println(ans);
String ans2 = StrUtil.toUnderlineCase("helloWorld");
System.out.println(ans2);
1
2
3
4
2
3
4
# 3.自定义
工具类:
public class ColumnUtil {
private static Pattern humpPattern = Pattern.compile("[A-Z]");
private static Pattern linePattern = Pattern.compile("_(\\w)");
/**
* 驼峰转下划线
* @param str
* @return
*/
public static String humpToLine(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();
}
/**
* 下划线转驼峰
* @param str
* @return
*/
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();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 4.mybatis-plus
- mybatis-plus 中的使用下划线和驼峰互转
- map-underscore-to-camel-case 设置为 true
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
1
2
3
2
3