下划线驼峰互转高效率方法

时间:2025-02-16 08:29:12
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(); } }