package com.xiaobu.base.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
-
@author xiaobu
-
@version JDK1.8.0_171
-
@date on 2019/7/10 14:46
-
@description 驼峰转下划线,下划线转驼峰
/
public class CamelUtil {
private static final Pattern CAMLE_PATTERN = Pattern.compile("_(\w)");
private static final Pattern UNDER_LINE_PATTERN = Pattern.compile("[A-Z]");
/*- 下划线转驼峰
*/
public static StringBuffer camel(StringBuffer str) {
//利用正则删除下划线,把下划线后一位改成大写
Matcher matcher = CAMLE_PATTERN.matcher(str);
StringBuffer sb = new StringBuffer(str);
if(matcher.find()) {
sb = new StringBuffer();
//将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
//正则之前的字符和被替换的字符
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
//把之后的也添加到StringBuffer对象里
matcher.appendTail(sb);
}else {
return sb;
}
return camel(sb);
}
/**
- 驼峰转下划线
*/
public static StringBuffer underLine(StringBuffer str) {
Matcher matcher = UNDER_LINE_PATTERN.matcher(str);
StringBuffer sb = new StringBuffer(str);
if(matcher.find()) {
sb = new StringBuffer();
//将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
//正则之前的字符和被替换的字符
matcher.appendReplacement(sb,"_"+matcher.group(0).toLowerCase());
//把之后的也添加到StringBuffer对象里
matcher.appendTail(sb);
}else {
return sb;
}
return underLine(sb);
}
public static void main(String[] args) {
String str = “dog_id”;
System.out.println("camel(str) = " + camel(new StringBuffer(str)));
} - 下划线转驼峰
}