从snake_case到camel

Dom*_*ico 5 java string

谁能告诉我如何将snake_case中的字符串转换为:

camel_case
Run Code Online (Sandbox Code Playgroud)

到camelCase中的字符串为:

camelCase
Run Code Online (Sandbox Code Playgroud)

在Java中?

先感谢您。

Ale*_*lex 11

Guava 的CaseFormat还提供了一个非常简洁的解决方案,允许您在驼峰案例甚至其他特定案例之间进行转换。

CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "camel_case"); // returns camelCase
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "CAMEL_CASE"); // returns CamelCase
CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "camelCase"); // returns CAMEL_CASE
CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, "CamelCase"); // returns camel-case
Run Code Online (Sandbox Code Playgroud)


Luí*_*res 8

您可以使用工具toCamelCase

CaseUtils.toCamelCase("camel_case", false, new char[]{'_'}); // returns "camelCase"
Run Code Online (Sandbox Code Playgroud)

来自Apache Commons Text


Arv*_*ash 7

Java SE 8+

\n

使用Java-8 Stream API,我们可以在一条语句中完成它。

\n
import java.util.Arrays;\nimport java.util.stream.Collectors;\n\npublic class Main {\n    public static void main(String[] args) {\n        String str = "snake_case_to_camel_case";\n\n        str = str.indexOf("_") != -1\n                ? str.substring(0, str.indexOf("_")) + \n                    Arrays.stream(str.substring(str.indexOf("_") + 1).split("_"))\n                        .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1)).collect(Collectors.joining())\n                : str;\n\n        System.out.println(str);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
snakeCaseToCamelCase\n
Run Code Online (Sandbox Code Playgroud)\n

ONLINE DEMO

\n

Java SE 9+

\n

Matcher#replaceAll\xe2\x80\x8b(Function<MatchResult, String> replacer)随着 Java SE 9 的引入,它变得更加容易。

\n
import java.util.regex.Pattern;\n\npublic class Main {\n    public static void main(String[] args) {\n        String str = "snake_case_to_camel_case";\n\n        str = Pattern.compile("_([a-z])")\n                    .matcher(str)\n                    .replaceAll(m -> m.group(1).toUpperCase());\n\n        System.out.println(str);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
snakeCaseToCamelCase\n
Run Code Online (Sandbox Code Playgroud)\n

ONLINE DEMO

\n


小智 6

这并不漂亮,但它有效:

String phrase = "camel_case";
String[] words = phrase.split("_");
String newPhrase = words[0];
for(int i=1; i<words.length; i++){
  newPhrase += words[i].substring(0,1).toUpperCase() + words[i].substring(1);
}
Run Code Online (Sandbox Code Playgroud)


She*_*lam 5

这可能很漂亮,并且可以在公共类Test {

public static void main(String[] args) {
    String phrase = "always_use_camel_back_notation_in_java";
    while(phrase.contains("_")) {
            phrase = phrase.replaceFirst("_[a-z]", String.valueOf(Character.toUpperCase(phrase.charAt(phrase.indexOf("_") + 1))));
        }
        System.out.println(phrase);
    }
}
Run Code Online (Sandbox Code Playgroud)


Noa*_*ker 3

查看 oracle 的string类文档,特别是substringcharAtindexOftoUpperCase

(你可以用这些作为拼图来解决你的问题)

  • 不需要正则表达式,你可以简单地用下划线分割 (3认同)
  • 我只会使用“split”和“Character.toUpperCase”。不确定“子字符串”在哪里发挥作用 (2认同)