当前位置: 首页 > 面试题库 >

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

融泓
2023-03-14
问题内容

我想编写一种将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 behind me, UC followed by LC in front of me

  XMLParser   AString    PDFLoader
    /\        /\           /\

non-UC behind me, UC in front of me

 MyClass   99Bottles
  /\        /\

Letter behind me, non-letter in front of me

 GL11    May5    BFG9000
  /\       /\      /\


 类似资料:
  • 问题内容: 如何在Java中将字节大小转换为人类可读的格式? 像1024应该变成“ 1 Kb”,而1024 * 1024应该变成“ 1 Mb”。 我有点讨厌为每个项目编写此实用程序方法。在Apache Commons中有一个静态方法吗? 问题答案: 有趣的事实:此处发布的原始代码段是有史以来复制最多的Java代码段,并且存在缺陷。它是固定的,但变得混乱。 本文全文:有史以来复制最多的Stack O

  • 问题内容: 我有一个纪元数,例如1389422614485。用于存储该值的值的数据类型为varchar。我想将其价值转换为人类可读的时间。我们该怎么做?此转换有任何示例吗? 问题答案: 您的纪元值似乎具有毫秒精度。因此,您需要使用一些mysql数学函数以及生成人类可读格式。

  • 问题内容: 我如何最好地将90060(秒)转换为字符串“ 25h 1m”? 目前,我正在使用SQL执行此操作: 但是我不确定这是最方便的方法:-) 我愿意在SQL(不同于我已经在做)或PHP中做到这一点。 编辑: 所需字符串的示例:“ 5m”,“ 40m”,“ 1h 35m”,“ 45h”,“ 46h 12m”。 问题答案: 文档是您的朋友: http://dev.mysql.com/doc/re

  • 我想将我的firebase数据对象映射到我的POJO。但是,我的firebase对象属性名是snake case,例如;“user_name”。我想在我的pojo上使用camelCase,例如;“用户名” 我找到了这样一个漂亮的答案,但是,我找不到任何关于snake_case到camelCase映射的示例。 我的波乔; 我使用下面的代码行进行映射。“content”匹配没有问题(有或没有@seri

  • 问题内容: 我明白了为什么使用正则表达式的字符串转换一样没有给出所需的输出到这反而给了。我可以用String.substring做一些事情,或者只是替换最后一个字符,但是我认为有一种更好的解决方案。 这是代码: 问题:正在寻找一种更整洁的方式来获得所需的输出? 问题答案: 看到这个问题,从番石榴 就您而言,类似:

  • 问题内容: 如果有一个对象,应该如何处理该对象并产生一个String? 假设我有一个包含文本数据的文件,并且想将其转换为String,因此例如可以将其写入日志文件。 InputStream将并将其转换为的最简单方法是String什么? 问题答案: 做到这一点的一种好方法是使用将apache复制 甚至 另外,如果您不想混合和 ,则可以使用