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 }