[英]Is there any simple way to convert camel-case to snake-case correctly?
我试过下面的代码片段,但 TradeID 打印为 Trade_I_D,但它必须是 Trade_ID。
getCurrency, getAccountName, getTradeID
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.