java - 如何在 Java 中将 CamelCase 转换为人类可读的名称?

标签 java regex string pascalcasing humanize

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

这是测试用例:

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"));
}

最佳答案

这适用于您的测试用例:

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])"
      ),
      " "
   );
}

这是一个测试工具:

    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 后面是我前面的 LC

  XMLParser   AString    PDFLoader
    /\        /\           /\

我后面的非 UC,我前面的 UC

 MyClass   99Bottles
  /\        /\

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

 GL11    May5    BFG9000
  /\       /\      /\

引用文献

相关问题

使用零长度匹配的lookarounds进行拆分:

关于java - 如何在 Java 中将 CamelCase 转换为人类可读的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559759/

相关文章:

python - 列表理解;将代码压缩为两行

python - NLTK 正则表达式和 CFG

c++ - 是否可以将宏的参数视为正则表达式?

python - 字符串索引必须是整数,而不是 str - Python 脚本

c# - 有人可以帮我将多个字符串数组分配给一个二维字符串数组吗?

java - 使用 Sniffy 指定的 Oracle URL 无效

Java - GluProject 如何处理旋转

php - 在非字母数字字符以及数字和非数字之间的位置上拆分字符串

java - 查询生成器中的 JPA 2.0 谓词条件列表

java - Eclipse Mars 不显示 Jboss 服务器