2015-01-14 43 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不希望將整個結果傳給LowCase,他指定他想要R = _R –

+1

@ Jean-FrançoisSavard該規範是錯誤的。看看他的代碼。既然他說它運作良好,他就製造了一個矛盾:D。 OP代碼也會產生結果「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的代碼恕我直言。 – m0skit0

相關問題