2013-03-20 5 views
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); 
} 

Это не удается после отображения «wanttobeacamel». Почему нет символов верхнего регистра?Смешайте это! Почему этот простой тестовый пример не работает?

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) 

========= Post Mortem:

Используя простой replaceAll был тупиковый. Я просто делал это ради удовольствия, чтобы научить моего ребенка кодировать ... но для Джаямохана, который спросил, вот альтернативный подход.

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); 
} 
+0

Я заметил свою ошибку ... но зачислил первого человека, который может указать на это. Нет ничего плохого в этом утверждении ... это то, что я ожидал от вывода - camelCasedString. – phatfingers

+0

Psst, чувак скажите мне, и я поделюсь репутацией;) – Thihara

+0

Thihara. Хех, хорошая попытка. джахрой ... нет. Не так эзотерично. – phatfingers

ответ

6

Я думаю, что это потому, что «$ 1» .toUpperCase() запускается перед заменойAll. Поскольку «1 доллар» буквально не имеет буквы в верхнем регистре, это то же самое, что и «1 доллар». Затем, когда replaceAll запускается, символ подчеркивания с последующим заглавным письмом заменяется просто строчным буквенным обозначением.

+0

dnault побил вас до удара, но затем удалил свой ответ – phatfingers

+0

(Хорошая работа, кстати). – phatfingers

+0

Да, я видел, что ... он получил меня примерно на 30 секунд. Благодаря! :-) –

Смежные вопросы