1
@Test
public void testCamelCase() {
    String orig="want_to_be_a_camel";
    String camel=orig.replaceAll("_([a-z])", "$1".toUpperCase());
    System.out.println(camel);
    assertEquals("wantToBeACamel", camel);
}

これは、「wanttbeacamel」と表示された後に失敗します。なぜ大文字がないのですか?

java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

========= 事後分析:

単純な replaceAll の使用は行き止まりでした。私は子供にコードを教える楽しみのためにこれをやっていました...しかし、尋ねたJayamohanのために、ここに別のアプローチがあります.

public String toCamelCase(String str) {
    if (str==null || str.length()==0) {
        return str;
    }
    char[] ar=str.toCharArray();
    int backref=0;
    ar[0]=Character.toLowerCase(ar[0]);
    for (int i=0; i<ar.length; i++) {
        if (ar[i]=='_') {
            ar[i-backref++]=Character.toUpperCase(ar[i+++1]);
        } else {
            ar[i-backref]=ar[i];
        }
    }
    return new String(ar).substring(0,ar.length-backref);
}
4

1 に答える 1

6

"$1".toUpperCase() が replaceAll の前に実行されるためだと思います。"$1" は文字どおり大文字にする文字がないため、単に "$1" と同じです。その後、replaceAll が実行されると、パターン underscore-followed-by-lower-case-letter が小文字のみに置き換えられます。

于 2013-03-20T02:30:37.323 に答える