2016-09-29 83 views
0

我想寫一個將CamelCase轉換爲人類可讀名稱的方法。 這與this question非常相似,但現在帶有下劃線。如何將下劃線轉換爲Java中的人類可讀名稱?

這裏的測試用例:

public void testSplitUnderscore() { 
    assertEquals("lowercase", splitUnderscore("lowercase")); 
    assertEquals("Class", splitUnderscore("Class")); 
    assertEquals("My Class", splitUnderscore("My_Class")); 
    assertEquals("HTML", splitUnderscore("HTML")); 
    assertEquals("PDF Loader", splitUnderscore("PDF_Loader")); 
    assertEquals("A String", splitUnderscore("A_String")); 
    assertEquals("Simple XML Parser", splitUnderscore("Simple_XML_Parser")); 
    assertEquals("GL 11 Version", splitUnderscore("GL_11_Version")); 
    assertEquals("99 Bottles", splitUnderscore("99_Bottle")); 
    assertEquals("May 5", splitUnderscore("May_5")); 
    assertEquals("BFG 9000", splitUnderscore("BFG_9000")); 
    assertEquals("beginning", splitUnderscore("_beginning")); 
    assertEquals("end", splitUnderscore("end_")); 
    assertEquals("double middle", splitUnderscore("double__middle")); 
    assertEquals("double end", splitUnderscore("double_end__")); 
    assertEquals("double start", splitUnderscore("__double_start")); 
    assertEquals("double start middle end", splitUnderscore("__double_start__middle_end__")); 
} 
+0

退房[阿帕奇百科全書(http://commons.apache.org /)...幹。 –

+0

爲什麼所有的票都是反對票?我該如何改進這個問題? – Whitecat

+0

@EddieB什麼是DRY?我沒有找到任何名爲DRY的項目。 – Whitecat

回答

4

完成,這將是一個' '更換每一個'_',然後修剪空格關閉最後一個字符串的天真的方式:

public static String splitUnderscore(String s) { 
    return s.replace("_", " ").trim(); 
} 

雖然上述工作對於大多數情況來說,爲了處理多個相鄰的下劃線,我們可以使用正則表達式來替換任何數量的連續下劃線,並且使用單個的下劃線' '

public static String splitUnderscore(String s) { 
    return s.replaceAll("_{1,}", " ").trim(); 
} 
+0

這將通過您的測試用例。 –

+0

如何使用額外的雙下劃線工作? – Whitecat

+0

我已編輯我的帖子來處理這種情況。 –

2

下面應該工作:

String.replace('_', " ").trim(); 
1

你應該有一對夫婦更多的測試用例:

assertEquals("A String", splitUnderscore("double__middle")); 
assertEquals("A String", splitUnderscore("double_end__")); 
assertEquals("A String", splitUnderscore("__double_start")); 
assertEquals("A String", splitUnderscore("__double_start__middle_end__")); 
+0

在問題中增加了額外的測試。 – Whitecat