繁体   English   中英

有什么简单的方法可以将驼峰式案例正确转换为蛇式案例吗?

[英]Is there any simple way to convert camel-case to snake-case correctly?

我试过下面的代码片段,但 TradeID 打印为 Trade_I_D,但它必须是 Trade_ID。

  • 输入: getCurrency, getAccountName, getTradeID
  • 预期 output: Currency, Account_Name, Trade_ID
public class RemoveGet {

    public static void main(String args[]) {
        for (String a : args) {
            String b = a.replace("get", "");
            //System.out.println(b);
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < b.length(); i++) {
                if (Character.isUpperCase(b.charAt(i))) {
                    sb.append("_");
                    sb.append(b.charAt(i));
                } else {
                    sb.append(b.charAt(i));
                }
            }
            //System.out.println(sb.toString());
            String c = sb.toString();
            if (c.startsWith("_")) {
                System.out.println(c.substring(1));
            }
        }
    }
}

尝试这个

str = str.replace("get", "")
    .replaceAll("([A-Z]+)([A-Z][a-z])", "$1_$2")
    .replaceAll("([a-z])([A-Z])", "$1_$2")

使用 boolean 第一次开关只在第二个大写字母后加下划线。

下面是一些测试结果。

getTradeID
Trade_ID

这是完整的可运行代码。

public class RemoveGet {

    public static void main(String args[]) {
        args = new String[1];
        args[0] = "getTradeID";
        
        for (String a : args) {
            System.out.println(a);
            String b = a.replace("get", "");
            boolean firstTimeSwitch = true;
//          System.out.println(b);
            StringBuffer sb = new StringBuffer();
            sb.append(b.charAt(0));
            
            for (int i = 1; i < b.length(); i++) {
                if (firstTimeSwitch && Character.isUpperCase(b.charAt(i))) {
                    sb.append("_");
                    sb.append(b.charAt(i));
                    firstTimeSwitch = false;
                } else {
                    sb.append(b.charAt(i));
                }
            }
            
            System.out.println(sb.toString());
        }
    }

}

与其把所有的逻辑都写在main function中,不如写一些函数来做一些小任务,然后在main function中调用它们。这使得代码可读性强,易于调试。 这可能是可能的解决方案代码:

public class RemoveGet {

 public static String addUnderScoreAppropriately(String input) {
     String result = "";
     String underScore = "_";
     for(int i=0; i<input.length();i++) {
         if((Character.isUpperCase(input.charAt(i))) && (i != 0)) {
             result = result + underScore + input.charAt(i);
         }else{
             result = result + input.charAt(i);
         }
     }
     result = result.replace("_I_D","_ID");
     return result;
 }

 public static void main(String args[]) {
    for (String a : args) {
        System.out.println(addUnderScoreAppropriately(a.replace("get","")));
    }
 }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM