in grails-forge-core/src/main/java/org/grails/forge/util/NameUtils.java [480:514]
public static String getNaturalName(String name) {
name = getShortName(name);
if (isBlank(name)) {
return name;
}
if (name.length() == 1) {
return name.toUpperCase();
} else {
StringBuilder sb = new StringBuilder();
sb.append(name.charAt(name.length() - 1));
//Traversing the string in reverse order
for (int i = name.length() - 2; i > 0; i--) {
char currChar = name.charAt(i);
char prevChar = name.charAt(i - 1);
char nextChar = name.charAt(i + 1);
boolean isCurrentCharLowerCase = Character.isLowerCase(currChar);
boolean isPrevCharLowerCase = Character.isLowerCase(prevChar);
boolean isNextCharLowerCase = Character.isLowerCase(nextChar);
if (isCurrentCharLowerCase != isPrevCharLowerCase && !isCurrentCharLowerCase) {
sb.append(currChar).append(" ");
} else if (isCurrentCharLowerCase == isPrevCharLowerCase && !isCurrentCharLowerCase && isNextCharLowerCase) {
sb.append(currChar).append(" ");
} else {
sb.append(currChar);
}
}
//The first character of the string is always in Upper case
sb.append(Character.toUpperCase(name.charAt(0)));
return sb.reverse().toString();
}
}