[英]JAVA - Not converting CamelCase to Snake_Case using ObjectMapping and SetPropertyNamingStrategy - SNAKE_CASE
[英]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"
查看 字符串类的 oracle 文档,特别是substring 、 charAt 、 indexOf和toUpperCase
(您可以将这些用作拼图来解决您的问题)
这并不漂亮,但它有效:
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-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
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.