2015-01-14 3 views
3

UserTable 형식의 문자열이 있습니다. 출력을 user_table로하고 싶습니다. 기본적으로 모든 대문자를 "_"및 문자로 바꿉니다. R=_R입니다.문자열의 모든 UpperLetters를 새 문자열로 바꿉니다.

이 코드가 있는데 제대로 작동합니다.

public static String getTableName(String clazz){ 
     String name = (clazz.charAt(0)+"").toLowerCase(); 
     for(int itr=1;itr<clazz.length();itr++){ 
      char ch = clazz.charAt(itr); 
      if(ch >=97 && ch <=122) 
       name += ch; 
      else 
       name += ("_"+ ch).toLowerCase() ; 

     } 
     return name; 
    } 

이 방법이 더 멋진 방식으로 수행 될 수 있는지 알고 싶습니다.

+0

이것은 정규식을위한 일 같이 소리가 난다 –

+0

흠 나는 이것이 유효한 질문이라고 생각하지 않는다. 그러나 네, 그것은 깔끔한 방식으로 행해질 수 있습니다. – m0skit0

+3

http://codereview.stackexchange.com/ – Tom

답변

6

제안 :

String input = "UserTable"; 
String result = input.replaceAll("(?!^)([A-Z])", "_$1").toLowerCase(); 
System.out.println(result); // user_table 
+1

멋지다. 교체 문자열에'$ 1'을 알지 못했다. 고마워. – m0skit0

+0

OP는 전체 결과가 LowerCase가 아니길 원하지만, 그가 R = _R을 원한다고 지정합니다. –

+1

@ Jean-FrançoisSavard이 스펙은 잘못되었습니다. 그의 코드를보십시오. 그가 잘 작동한다고 말했기 때문에, 그는 모순을 창조했다 : D. OP 코드는 결과 "user_table"도 생성합니다. – Tom

0

당신은에 StringBuilder를 사용할 수 있습니다 소문자로 결과를 변환, 밑줄로 대문자를 앞에 추가 정규 표현식 (아니지만 처음에, (?!^) 뒤에 때문에 부정적인 모습)를 사용하여 달성하십시오 :

+0

OP의 코드 IMHO보다 나은 것은 아닙니다. – m0skit0

관련 문제