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

Хммм я не думаю, что это правильный вопрос для SO. Но да, это можно сделать более аккуратным способом. – 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 не хочет весь результат toLowerCase, он указывает, что он хочет R = _R –

+1

@ Jean-FrançoisSavard Эта спецификация неверна. Посмотрите на его код. Поскольку он сказал, что это прекрасно работает, он создал противоречие: D. Код OPs также приведет к результату «user_table». – Tom

0

Вы можете использовать StringBuilder для достижения этой цели:

StringBuilder builder = new StringBuilder(); 
String input = "UserTable"; 

for (int i = 0; i < input.length(); i++) { 
    char ch = input.charAt(i); 

    if (i > 0 && Character.isUpperCase(ch)) { 
    builder.append('_'); 
    } 

    builder.append(Character.toLowerCase(ch)); 
} 

String result = builder.toString(); 
+0

Не лучше кода OP IMHO. – m0skit0

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