26

我需要更改字符串:下划线 + 小写 = 大写。(反之亦然)

my_name -> myName

有没有图书馆或其他东西可以帮助解决这个问题?

4

8 回答 8

62

您可以使用来自 google Guava的CaseFormat课程LOWER_UNDERSCORE

CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "my_name")
于 2013-06-12T08:50:14.277 回答
10

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

    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
于 2013-06-12T09:01:10.793 回答
5

CaseFormat是 Google Guava 中的一个实用程序类,用于在大小写约定之间进行转换。

于 2013-06-12T08:50:33.317 回答
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());
于 2016-10-06T14:21:43.020 回答
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);
于 2013-06-12T09:31:12.717 回答
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("_","");
于 2014-02-20T09:01:39.757 回答
0
String s="srinivas";

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

//s Value is "Srinivas" now
于 2014-02-20T08:50:34.050 回答
0

您可以使用appendReplacement将下划线后面的小写字符替换为大写

appendReplacement 和 appendTail 方法可以串联使用,以便将结果收集到现有的字符串缓冲区中

    String text = "my_name_is";
    Matcher m = Pattern.compile("([_][a-z])").matcher(text);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, m.group().substring(1).toUpperCase());
    }
    m.appendTail(sb);
于 2018-04-11T06:39:30.037 回答