2016-09-29 82 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