插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~
背景
在日常开发过程中,驼峰与下划线的互相转换也是比较常见的操作。比如db中表的列名是一划线命名,而java实体命名则是驼峰格式命名。 下面将介绍几种驼峰与下划线互转的实现方式。
1. Gauva:CaseFormat类
// 驼峰转下划线
String ans = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "helloWorld");
System.out.println(ans); //hello_world
// 下划线转驼峰
String ans2 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "hello_world");
System.out.println(ans2); //helloWorld
注意:
驼峰转下划线,一般指将大写字母转小写,并将大写字母前面加上下划线;
下线线转驼峰,一般指将下划线去掉,并将下划线后面的一个字母转为大写。
所以,对于不规则的输入,如helloworldCase, 驼峰转下划线一般会转成:helloworld_case; 对于helloworld_case,下划线转驼峰一般会转成helloworldCase
2.Hutool: StrUtil类
除了上面的guava,hutool的使用也非常广,其中包含很多工具类,其 StrUtil 也提供了下划线与 驼峰的互转支持
//下划线转驼峰
String ans = StrUtil.toCamelCase("hello_world");
System.out.println(ans); //helloWorld
//驼峰转下划线
String ans2 = StrUtil.toUnderlineCase("helloWorld"); System.out.println(ans2); //hello_world
3.自定义实现
3.1 驼峰转下划线
关键点:大写字母,则前位补一个下划线,当前字符转小写(如果前面已经是一个下划线了, 那前面不补,直接转小写即可)
public static String toUnderCase(String name) {
if (name == null) {
return null;
}
int len = name.length();
StringBuilder res = new StringBuilder(len + 2);
char pre = 0;
for (int i = 0; i < len; i++){
char ch = name.charAt(i);
if (Character.isUpperCase(ch)) {
if (pre != UNDER_LINE) {
res.append(UNDER_LINE);
}
res.append(Character.toLowerCase(ch));
} else {
res.append(ch);
}
pre = ch;
}
return res.toString();
}
3.2 下划线转驼峰
关键点:找到下划线,然后去掉它,下一个字符转大写续上(如果下一个还是下划线,那 继续找下一个)
private static final char UNDER_LINE = '_';
/**
* 下划线转驼峰 *
*
* @param name * @return
*/
public static String toCamelCase(String name) {
if (null == name || name.length() == 0) {
return null;
}
int length = name.length();
StringBuilder sb = new StringBuilder(length);
boolean underLineNextChar = false;
for (int i = 0; i < length; ++i) {
char c = name.charAt(i);
if (c == UNDER_LINE) {
underLineNextChar = true;
} else if (underLineNextChar) {
sb.append(Character.toUpperCase(c));
underLineNextChar = false;
} else {
sb.append(c);
}
}
return sb.toString();
}