Mat*_*all 136 java regex string
标题基本概括了所有内容.我能用Java格式"THIS_IS_AN_EXAMPLE_STRING"转换格式为" ThisIsAnExampleString" 的字符串的最简单/最优雅的方法是什么?我认为必须至少有一种方法可以使用String.replaceAll()和正则表达式.
我最初的想法是:在字符串前加下划线(_),将整个字符串转换为小写,然后使用replaceAll将每个前面带下划线的字符转换为大写字母.
Arn*_*len 176
另一种选择是使用谷歌番石榴 com.google.common.base.CaseFormat
George Hawkins在这个用法示例中留下了评论:
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");
Dan*_*ell 119
看一下Apache Commons lang库中的WordUtils:
具体来说,capitalizeFully(String str,char [] delimiters)方法应该完成这项工作:
String blah = "LORD_OF_THE_RINGS";
assertEquals("LordOfTheRings", WordUtils.capitalizeFully(blah, new char[]{'_'}).replaceAll("_", ""));
绿吧!
C. *_*oss 89
static String toCamelCase(String s){
   String[] parts = s.split("_");
   String camelCaseString = "";
   for (String part : parts){
      camelCaseString = camelCaseString + toProperCase(part);
   }
   return camelCaseString;
}
static String toProperCase(String s) {
    return s.substring(0, 1).toUpperCase() +
               s.substring(1).toLowerCase();
}
注意:您需要添加参数验证.
lib*_*cha 17
使用Apache Commons Lang3 lib非常容易.
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
public String getName(String text) {
  return StringUtils.remove(WordUtils.capitalizeFully(text, '_'), "_");
}
例:
getName("SOME_CONSTANT");
得到:
"SomeConstant"
public static void main(String[] args) {
    String start = "THIS_IS_A_TEST";
    StringBuffer sb = new StringBuffer();
    for (String s : start.split("_")) {
        sb.append(Character.toUpperCase(s.charAt(0)));
        if (s.length() > 1) {
            sb.append(s.substring(1, s.length()).toLowerCase());
        }
    }
    System.out.println(sb);
}
以下是可能有用的代码段:
String input = "ABC_DEF";
StringBuilder sb = new StringBuilder();
for( String oneString : input.toLowerCase().split("_") )
{
    sb.append( oneString.substring(0,1).toUpperCase() );
    sb.append( oneString.substring(1) );
}
// sb now holds your desired String
使用 Streams 的 Java 1.8 示例
String text = "THIS_IS_SOME_TEXT";
String bactrianCamel = Stream.of(text.split("[^a-zA-Z0-9]"))
        .map(v -> v.substring(0, 1).toUpperCase() + v.substring(1).toLowerCase())
        .collect(Collectors.joining());
String dromedaryCamel = bactrianCamel.toLowerCase().substring(0, 1) + bactrianCamel.substring(1); 
System.out.printf("%s is now %s%n", text, dromedaryCamel); 
THIS_IS_SOME_TEXT现在是thisIsSomeText
Apache Commons 项目现在有CaseUtils类,它有一个toCamelCase方法,完全按照 OP 的要求执行:
 CaseUtils.toCamelCase("THIS_IS_AN_EXAMPLE_STRING", true, '_');