簡體   English   中英

Java中從snake_case到camelCase

[英]From snake_case to camelCase in Java

誰能告訴我如何將 snake_case 中的字符串轉換為:

camel_case

到camelCase中的字符串為:

camelCase

在爪哇?

先感謝您。

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

這可能很漂亮,而且很有效

public class 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);
        }
    }

您可以使用toCamelCase

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

來自Apache Commons Text

查看 字符串類的 oracle 文檔,特別是substringcharAtindexOftoUpperCase

(您可以將這些用作拼圖來解決您的問題)

這並不漂亮,但它有效:

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);
}

使用split("_")並循環遍歷這些部分是一種方法。

這是使用StringBuilder的替代方法。

String s = "make_me_camel_case";
StringBuilder sb = new StringBuilder(s);

for (int i = 0; i < sb.length(); i++) {
    if (sb.charAt(i) == '_') {
        sb.deleteCharAt(i);
        sb.replace(i, i+1, String.valueOf(Character.toUpperCase(sb.charAt(i))));
    }
}

System.out.println(sb.toString()); // makeMeCamelCase

Java SE 8+

使用Java-8 Stream API ,我們可以在一條語句中完成。

import java.util.Arrays;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        String str = "snake_case_to_camel_case";

        str = str.indexOf("_") != -1
                ? str.substring(0, str.indexOf("_")) + 
                    Arrays.stream(str.substring(str.indexOf("_") + 1).split("_"))
                        .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1)).collect(Collectors.joining())
                : str;

        System.out.println(str);
    }
}

輸出:

snakeCaseToCamelCase

在線演示

Java SE 9+

Matcher#replaceAll​(Function<MatchResult, String> replacer)隨 Java SE 9 引入,使其更加簡單。

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "snake_case_to_camel_case";

        str = Pattern.compile("_([a-z])")
                    .matcher(str)
                    .replaceAll(m -> m.group(1).toUpperCase());

        System.out.println(str);
    }
}

輸出:

snakeCaseToCamelCase

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM