下划线驼峰互转高效率方法
public class HLUtil {
private static final Pattern linePattern = Pattern.compile("_(\\w)");
private static final Pattern humpPattern = Pattern.compile("[A-Z]");
public static void main(String[] args) {
int size = 100 * 10000;
List<String> stringList1 = new ArrayList<>();
List<String> stringList2 = new ArrayList<>();
for (int i = 0; i < size; i++) {
String s = "aa_sda_as_das_dsfs_xcvz_sef_wer_sdf_sdf_ds_sdf_sdf_rwer_ew_rew_sds_";
stringList1.add(s);
stringList2.add(fastLine2Hump(s));
}
for (int i = 0; i < 10; i++) {
long start1 = System.currentTimeMillis();
for (String str : stringList1) {
fastLine2Hump(str);
}
long time1 = System.currentTimeMillis() - start1;
long start2 = System.currentTimeMillis();
for (String str : stringList2) {
fastHump2Line(str);
}
long time2 = System.currentTimeMillis() - start2;
long start3 = System.currentTimeMillis();
for (String str : stringList1) {
line2Hump(str);
}
long time3 = System.currentTimeMillis() - start3;
long start4 = System.currentTimeMillis();
for (String str : stringList2) {
hump2Line(str);
}
long time4 = System.currentTimeMillis() - start4;
System.out.println(time1 + " ** " + time2 + " ** " + time3 + " ** " + time4);
}
}
/**
* 下划线转驼峰
*/
public static String line2Hump(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();
}
/**
* 驼峰转下划线
*/
public static String hump2Line(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 String fastLine2Hump(String name) {
StringBuilder sb = new StringBuilder(name);
int length = sb.length();
for (int i = 0; i < length - 1; i++) {
if (sb.charAt(i) == 95) {
char c = sb.charAt(i + 1);
if (c > 96 && c < 123) {
sb.replace(i, i + 2, new String(new char[]{(char) (c - 32)}));
} else {
sb.deleteCharAt(i);
}
length--;
}
}
if (sb.charAt(length - 1) == 95) {
sb.deleteCharAt(length - 1);
}
return sb.toString();
}
/**
* 高效率驼峰转下划线
*/
public static String fastHump2Line(String name) {
StringBuilder sb = new StringBuilder(name);
int length = sb.length();
for (int i = 0; i < length; i++) {
char c = sb.charAt(i);
if (c > 64 && c < 91) {
sb.replace(i, i + 1, new String(new char[]{95, (char) (c + 32)}));
length++;
i++;
}
}
return sb.toString();
}
}