java驼峰法和下划线法字符串的相互转换

java驼峰法和下划线法字符串的相互转换
1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class CamelAndUnderLineConverter { 5 private static Pattern linePattern = Pattern.compile("_(\\w)"); 6 7 /** 8 * 下划线转驼峰 9 */ 10 public static String lineToHump(String str) { 11 str = str.toLowerCase(); 12 Matcher matcher = linePattern.matcher(str); 13 StringBuffer sb = new StringBuffer(); 14 while (matcher.find()) { 15 matcher.appendReplacement(sb, matcher.group(1).toUpperCase()); 16 } 17 matcher.appendTail(sb); 18 return sb.toString(); 19 } 20 21 /** 22 * 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)}) 23 */ 24 public static String humpToLine(String str) { 25 return str.replaceAll("[A-Z]", "_$0").toLowerCase(); 26 } 27 28 private static Pattern humpPattern = Pattern.compile("[A-Z]"); 29 30 /** 31 * 驼峰转下划线,效率比上面高 32 */ 33 public static String humpToLine2(String str) { 34 Matcher matcher = humpPattern.matcher(str); 35 StringBuffer sb = new StringBuffer(); 36 while (matcher.find()) { 37 matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase()); 38 } 39 matcher.appendTail(sb); 40 return sb.toString(); 41 } 42 43 public static void main(String[] args) { 44 String lineToHump = lineToHump("f_parent_no_leader"); 45 System.out.println(lineToHump);// fParentNoLeader 46 System.out.println(humpToLine(lineToHump));// f_parent_no_leader 47 System.out.println(humpToLine2(lineToHump));// f_parent_no_leader 48 } 49 }