Joa*_*uer 61
String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2");
Run Code Online (Sandbox Code Playgroud)
这个正则表达式用大写字母搜索一个小写字母,并用前者,空格和后者替换它们(用空格有效地将它们分开).它将每个都放在一个捕获组()中,以便能够通过后引用($1和$2)重用替换字符串中的值.
要查找它使用的大写和小写字母\p{Ll}和\p{Lu}(而不是[a-z]和[A-Z]),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅是ASCII范围中的字母(在正则表达式中对Unicode的这个很好的解释主要适用于Java)以及).
更好是主观的。这需要更多的代码行:
public static String deCamelCasealize(String camelCasedString) {
if (camelCasedString == null || camelCasedString.isEmpty())
return camelCasedString;
StringBuilder result = new StringBuilder();
result.append(camelCasedString.charAt(0));
for (int i = 1; i < camelCasedString.length(); i++) {
if (Character.isUpperCase(camelCasedString.charAt(i)))
result.append(" ");
result.append(camelCasedString.charAt(i));
}
return result.toString();
}
Run Code Online (Sandbox Code Playgroud)
将这个丑陋的实现隐藏在实用程序类中,并将其用作API(从用户角度看还不错;))