2013-06-12 43 views

回答

42

您可以从谷歌Guava使用CaseFormat class's LOWER_UNDERSCORE

CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "my_name") 
+0

番石榴真的拥有一切:) –

+1

注意,这个转换骆驼,套管串为小写,例如'accountUsers'改为'accountusers',在这种情况下,仅在必要时使用它才是有用的,例如,原始字符串包含下划线。 – charneykaye

3

CaseFormat是谷歌番石榴的实用工具类案件公约之间转换。

+0

我修复了这个链接。感谢@aristotll通知。 – obourgain

7

我建议一个定制的解决方案

Pattern p = Pattern.compile("_(.)"); 
    Matcher m = p.matcher("my_name"); 
    StringBuffer sb = new StringBuffer(); 
    while (m.find()) { 
     m.appendReplacement(sb, m.group(1).toUpperCase()); 
    } 
    m.appendTail(sb); 
    System.out.println(sb.toString()); 

输出

myName 
+1

为什么StringBuffer而不是StringBuilder? –

+1

由于Matcher.appendReplacement希望StringBuffer –

+1

谢谢你不想在此包含Guava –

1

检查这个代码,我已经验证它。

 String str = new String("my_name"); 

     for(int i=0;i<str.length()-1;i++){ 
      if(str.charAt(i)=='_' && (int) str.charAt(i+1)>=97 && (int) str.charAt(i+1)<=122){ 
       str=str.replace(str.substring(i, i+2),""+(char)((int) str.charAt(i+1)-32)); 
      } 
     } 
     System.out.println(str); 
0
String s="srinivas"; 

s=s.replaceFirst(Character.toString(s.charAt(0)), 
       Character.toString(Character.toUpperCase(s.charAt(0)))); 

//s Value is "Srinivas" now 
1
String s="My_name"; 
     int i=s.indexOf('_');  
     s=s.replaceFirst(Character.toString(s.charAt(i+1)),Character.toString(Character.toUpperCase(s.charAt(i+1)))); 
     s=s.replaceAll("_",""); 
+0

一点点的解释或引用不会造成伤害,通常要求这些问题通常没有基础知识,但你知道所做的一切,这会有所帮助。 – nKn

+0

如果你想替换的字符有多个出现,你应该把它放到一个递归方法中,而不是#replaceAll(String,String)'use#'replaceFirst(String,String)'。第一个参数是要替换的字符(在索引'i'处)与您想要大写的字符串联(在索引'i + 1'处),第二个参数是capatalised char(如上所述) –

3

另一种解决方案是使用的StringTokenizer:

String value = "id_app"; 
    StringTokenizer toekn = new StringTokenizer(value,"_"); 
    StringBuilder str = new StringBuilder(toekn.nextToken()); 
    while (toekn.hasMoreTokens()) { 
     String s = toekn.nextToken(); 
     str.append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)); 
    } 
    System.out.println(str.toString());