首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java语言中将CamelCase转换为人类可读的名称?

如何在Java语言中将CamelCase转换为人类可读的名称?
EN

Stack Overflow用户
提问于 2010-04-01 18:42:06
回答 12查看 70.3K关注 0票数 166

我想编写一个方法,将CamelCase转换为人类可读的名称。

下面是测试用例:

代码语言:javascript
复制
public void testSplitCamelCase() {
    assertEquals("lowercase", splitCamelCase("lowercase"));
    assertEquals("Class", splitCamelCase("Class"));
    assertEquals("My Class", splitCamelCase("MyClass"));
    assertEquals("HTML", splitCamelCase("HTML"));
    assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
    assertEquals("A String", splitCamelCase("AString"));
    assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
    assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-04-01 19:35:14

这适用于您的测试用例:

代码语言:javascript
复制
static String splitCamelCase(String s) {
   return s.replaceAll(
      String.format("%s|%s|%s",
         "(?<=[A-Z])(?=[A-Z][a-z])",
         "(?<=[^A-Z])(?=[A-Z])",
         "(?<=[A-Za-z])(?=[^A-Za-z])"
      ),
      " "
   );
}

下面是一个测试工具:

代码语言:javascript
复制
    String[] tests = {
        "lowercase",        // [lowercase]
        "Class",            // [Class]
        "MyClass",          // [My Class]
        "HTML",             // [HTML]
        "PDFLoader",        // [PDF Loader]
        "AString",          // [A String]
        "SimpleXMLParser",  // [Simple XML Parser]
        "GL11Version",      // [GL 11 Version]
        "99Bottles",        // [99 Bottles]
        "May5",             // [May 5]
        "BFG9000",          // [BFG 9000]
    };
    for (String test : tests) {
        System.out.println("[" + splitCamelCase(test) + "]");
    }

它使用长度为零的匹配正则表达式,并使用后视和前视来查找插入空格的位置。基本上有3种模式,我使用String.format将它们组合在一起,使其更具可读性。

这三种模式是:

UC在我后面,UC紧跟在我前面

代码语言:javascript
复制
  XMLParser   AString    PDFLoader
    /\        /\           /\

非UC在我后面,UC在我前面

代码语言:javascript
复制
 MyClass   99Bottles
  /\        /\

字母在我后面,非字母在我面前

代码语言:javascript
复制
 GL11    May5    BFG9000
  /\       /\      /\

参考文献

  • regular-expressions.info/Lookarounds

相关问题

使用零长度匹配环视来拆分:

票数 348
EN

Stack Overflow用户

发布于 2013-09-19 13:57:31

您可以使用org.apache.commons.lang.StringUtils完成此操作

代码语言:javascript
复制
StringUtils.join(
     StringUtils.splitByCharacterTypeCamelCase("ExampleTest"),
     ' '
);
票数 134
EN

Stack Overflow用户

发布于 2017-10-26 12:10:17

简洁而简短的解决方案:

代码语言:javascript
复制
StringUtils.capitalize(StringUtils.join(StringUtils.splitByCharacterTypeCamelCase("yourCamelCaseText"), StringUtils.SPACE)); // Your Camel Case Text
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2559759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档