大写字母后插入空格

Emi*_*mil 20 java string

如何转换"HelloWorld""Hello World".分裂必须基于大写字母,但应排除第一个字母.

PS:我知道使用String.split然后合并.只是想知道是否有更好的方法.

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)以及).


And*_*s_D 5

更好是主观的。这需要更多的代码行:

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(从用户角度看还不错;))