我想编写一个方法,将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"));
}发布于 2010-04-01 19:35:14
这适用于您的测试用例:
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紧跟在我前面
XMLParser AString PDFLoader
/\ /\ /\非UC在我后面,UC在我前面
MyClass 99Bottles
/\ /\字母在我后面,非字母在我面前
GL11 May5 BFG9000
/\ /\ /\参考文献
相关问题
使用零长度匹配环视来拆分:
发布于 2013-09-19 13:57:31
您可以使用org.apache.commons.lang.StringUtils完成此操作
StringUtils.join(
StringUtils.splitByCharacterTypeCamelCase("ExampleTest"),
' '
);发布于 2017-10-26 12:10:17
简洁而简短的解决方案:
StringUtils.capitalize(StringUtils.join(StringUtils.splitByCharacterTypeCamelCase("yourCamelCaseText"), StringUtils.SPACE)); // Your Camel Case Texthttps://stackoverflow.com/questions/2559759
复制相似问题