2010-12-21 41 views
3

我正在製作一種方法來讀取整個類代碼並對其進行一些操作。將字符串分解爲大寫的字符

我想要做的是獲取方法的名稱,並用它做一個字符串。

喜歡的東西removeProduct

我將做一個字符串「刪除產品」

我如何拆分死刑案件的名稱的方法? 如何將每個單詞的第一個字母作爲大寫字母來構建這個新字符串? 我正在做的子字符串,有沒有更容易和更好的方法來做到這一點?

ps:我確定我的巴西英語對標題沒有幫助。如果任何人都可以讓它看起來更好,我會很感激。

+1

是否所有的方法將遵循此camelCaseStyle? – birryree 2010-12-21 17:47:05

+1

是的,他們將在camelCaseStyle – pringlesinn 2010-12-21 17:57:57

回答

3

您可以使用正則表達式的名字拆分成不同的詞,然後利用第一種:

public static void main(String[] args) { 
    String input = "removeProduct"; 

    //split into words 
    String[] words = input.split("(?=[A-Z])"); 

    words[0] = capitalizeFirstLetter(words[0]); 

    //join 
    StringBuilder builder = new StringBuilder(); 
    for (String s : words) { 
     builder.append(s).append(" "); 
    } 

    System.out.println(builder.toString()); 

} 

private static String capitalizeFirstLetter(String in) { 
    return in.substring(0, 1).toUpperCase() + in.substring(1); 
} 

注意,需要這個更好的角落辦案,如在沒有附加的空間結束並處理1個字符的單詞。

編輯:我打算解釋正則表達式。正則表達式(?=[A-Z])是與下一個字符在'A'和'Z'之間的位置匹配的zero-width assertion (positive lookahead)

0
public String convertMethodName(String methodName) { 
    StringBuilder sb = new StringBuilder().append(Character.toUpperCase(methodName.charAt(0))); 
    for (int i = 1; i < methodName.length(); i++) { 
     char c = methodName.charAt(i); 
     if (Character.isUpperCase(c)) { 
      sb.append(' '); 
     } 
     sb.append(c); 
    } 
    return sb.toString(); 
} 

處理這種方式可能給你如果你想在以後的功能增加對其他情況(連續多個瓶蓋等)的一些更好的控制。基本上,對於每個字符,它只檢查它是否在大寫字母(字符代碼65-90,含)之內,如果是,則在字開始之前向緩衝區添加空格。

編輯:使用Character.isUpperCase()

0

可以在2個步驟執行此操作:

1 - 使字符串大寫的第一個字母。

2 - 在以小寫字母開頭的大寫字母之前插入一個空格。

對於步驟1可以使用一個功能和用於步驟2可以使用String.replaceAll方法:

String str = "removeProduct"; 
str = capitalizeFirst(str); 
str = str.replaceAll("(?<=[^A-Z])([A-Z])"," $1"); 

static String capitalizeFirst(String input) { 
     return input.substring(0, 1).toUpperCase() + input.substring(1); 
} 

Code In Action

6

不要打擾重新發明輪子,使用的方法在commons-lang

String input = "methodName"; 
String[] words = StringUtils.splitByCharacterTypeCamelCase(methodName); 
String humanised = StringUtils.join(words, ' '); 
0

@MrWiggles是對的。 只是另一種方式來做到這一點,而不被花哨:)

import java.util.StringTokenizer; 

public class StringUtil { 

    public static String captilizeFirstLetter(String token) { 
     return Character.toUpperCase(token.charAt(0)) + token.substring(1); 
    } 

    public static String convert(String str) { 
     final StringTokenizer st = new StringTokenizer(str, 
       "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", true); 
     final StringBuilder sb = new StringBuilder(); 
     String token; 
     if (st.hasMoreTokens()) { 
      token = st.nextToken(); 
      sb.append(StringUtil.captilizeFirstLetter(token) + " "); 
     } 

     while (st.hasMoreTokens()) { 
      token = st.nextToken(); 
      if (st.hasMoreTokens()) { 
       token = token + st.nextToken(); 
      } 

      sb.append(StringUtil.captilizeFirstLetter(token) + " "); 
     } 
     return sb.toString().trim(); 
    } 

    public static void main(String[] args) throws Exception { 

     String words = StringUtil.convert("helloWorldHowAreYou"); 
     System.out.println(words); 
    } 
}