Duncan Jones created LANG-1294: ---------------------------------- Summary: WordUtils.capitalize() can't handle 1:M conversions Key: LANG-1294 URL: https://issues.apache.org/jira/browse/LANG-1294 Project: Commons Lang Issue Type: Bug Components: lang.text.* Affects Versions: 3.5 Reporter: Duncan Jones
Some case conversions are not 1:1, for instance the German letter ß, which is normally capitalised to 'SS'. {code:java} // Failing test assertEquals("SS", WordUtils.capitalize("\u00DF")); {code} If we were using upper case and not title case, a solution such as the following would work: {code:java} public static String capitalize(final String str, final char... delimiters) { final int delimLen = delimiters == null ? -1 : delimiters.length; if (StringUtils.isEmpty(str) || delimLen == 0) { return str; } final StringBuffer buffer = new StringBuffer(str.length()); final char[] chars = str.toCharArray(); boolean capitalizeNext = true; for (int i = 0; i < chars.length; i++) { final char ch = chars[i]; if (isDelimiter(ch, delimiters)) { capitalizeNext = true; buffer.append(ch); } else if (capitalizeNext) { // Use ENGLISH locale to be backwards compatible with previous releases, which // used Character.toUpperCase() buffer.append(String.valueOf(ch).toUpperCase(Locale.ENGLISH)); capitalizeNext = false; } else { buffer.append(ch); } } return buffer.toString(); } {code} ... but as we use title case, we can't use the String class to convert for us. -- This message was sent by Atlassian JIRA (v6.3.4#6332)