Q:

Insert Space After Capital letter

How to covert "HelloWorld" to "Hello World".The splitting has to take place based on The Upper-Case letters ,but should exclude the first letter. 
P.S:I'm aware of using String.split and then combining.Just wanted to know if there is a better way. 

A:

String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2");

This regex searches for a lowercase letter follwed by an uppercase letter and replaces them with the former, a space and the latter (effectively separating them with a space). It puts each of them in a capturing group () in order to be able to re-use the values in the replacement string via back references ($1 and $2).
To find upper- and lowercase letters it uses \p{Ll} and \p{Lu} (instead of [a-z] and [A-Z]), because it handles all upper- and lowercase letters in the Unicode standard and not just the ones in the ASCII range (this nice explanation of Unicode in regexes mostly applies to Java as well).

A:

Better is subjective. This takes some more lines of code:
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();
}

Hide this ugly implementation in a utility class and use it as an API (looks OK from the user perspective ;) )

A:

    String s = "HelloWorldNishant";
    StringBuilder out = new StringBuilder(s);
    Pattern p = Pattern.compile("[A-Z]");
    Matcher m = p.matcher(s);
    int extraFeed = 0;
    while(m.find()){
        if(m.start()!=0){
            out = out.insert(m.start()+extraFeed, " ");
            extraFeed++;
        }
    }
    System.out.println(out);

prints

Hello World Nishant

