这适用于你的测试用例:
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 / / /



