本文介绍了如何在 Java 中将 CamelCase 转换为人类可读的名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想编写一个方法,将 CamelCase 转换为人类可读的名称.
I'd like to write a method that converts CamelCase into a human-readable name.
这是测试用例:
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"));
}
推荐答案
这适用于您的测试用例:
This works with your testcases:
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
将它们放在一起以使其更具可读性.
It uses zero-length matching regex with lookbehind and lookforward to find where to insert spaces. Basically there are 3 patterns, and I use String.format
to put them together to make it more readable.
这三种模式是:
XMLParser AString PDFLoader
/ / /
非UC在我身后,UC在我面前
MyClass 99Bottles
/ /
信在我身后,非信在我面前
GL11 May5 BFG9000
/ / /
参考资料
- regular-expressions.info/Lookarounds
使用零长度匹配环视进行拆分:
Using zero-length matching lookarounds to split:
这篇关于如何在 Java 中将 CamelCase 转换为人类可读的名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!