//converts a given string to Title Case where the
//first letter of every word is capitalised and the rest are small
public String toTitleCase(String phrase){
String titlePhrase = '';
//a set of words that should always (or at least, almost always) be in lower case when in Title Case
//eg The Day of the Jackal. First and last word of a phrase should always be Capped though.
Set<String> forceLower = new Set<String>{'of', 'the', 'for', 'and', 'a', 'to', 'at' ,'an', 'but', 'if', 'or', 'nor'};
if(phrase != null && phrase.length() > 0){
String[] splitPhrase = phrase.trim().split(' ');
for(integer i = 0; i < splitPhrase.size(); i++){
if(!forceLower.contains(splitPhrase[i].toLowerCase()) || i == 0 || i == (splitPhrase.size()-1) ){
titlePhrase += (splitPhrase[i].substring(0,1).toUpperCase())+(splitPhrase[i].substring(1).toLowerCase())+' ';
}else{
titlePhrase += splitPhrase[i].toLowerCase()+' ';
}
}
}
return titlePhrase.trim();
}
Which is pretty good, it always capitalises the first and last words, other than that it capitalises everything that isn't in the list of conjunctions, which obviously you could customise. If you wanted to avoid having to update code each time you thought of a new word you could make a picklist of values and pull them out with a describe call, meaning an administrator can add words to force to lower case as necessary.
I return a trim because I always add a space at the end of titlePhrase in preparation for the next word.
Greetings: I am looking to convert names to all Uppercase for several objects because of names such as McMillan or McDonald. What would be efficient code to accomplish this. Thanks
Thanks for this, it looks good. I want to this in such a way that every time we do an insert or an update, this method runs. Do you know of a way I can incorporate this in a trigger? Maybe a sample trigger?
private static Pattern wordPattern = Pattern.compile('\\w+');
public static String toTitleCase(String s) {
if (s == null) {
return null;
}
String result = '';
Integer i = 0;
Matcher m = wordPattern.matcher(s);
while (m.find()) {
result += s.substring(i, m.start());
result += m.group().toLowerCase().capitalize();
i = m.end();
}
result += s.substring(i, s.length());
return result;
}
@ministe2003 your code was really helpful. Saved me from a tiring session of pseudo-coding! :)
//converts a given string to Title Case where the
//first letter of every word is capitalised and the rest are small
public String toTitleCase(String phrase){
String titlePhrase = '';
//a set of words that should always (or at least, almost always) be in lower case when in Title Case
//eg The Day of the Jackal. First and last word of a phrase should always be Capped though.
Set<String> forceLower = new Set<String>{'of', 'the', 'for', 'and', 'a', 'to', 'at' ,'an', 'but', 'if', 'or', 'nor'};
if(phrase != null && phrase.length() > 0){
String[] splitPhrase = phrase.trim().split(' ');
for(integer i = 0; i < splitPhrase.size(); i++){
if(!forceLower.contains(splitPhrase[i].toLowerCase()) || i == 0 || i == (splitPhrase.size()-1) ){
titlePhrase += (splitPhrase[i].substring(0,1).toUpperCase())+(splitPhrase[i].substring(1).toLowerCase())+' ';
}else{
titlePhrase += splitPhrase[i].toLowerCase()+' ';
}
}
}
return titlePhrase.trim();
}
Which is pretty good, it always capitalises the first and last words, other than that it capitalises everything that isn't in the list of conjunctions, which obviously you could customise. https://www.laweekly.com/masszymes-reviews/
String.proper() doesn't exisit in Apex, and I think that is what you want.
Excel work sheets have this function.
You will have to write this method yourself.
Message Edited by mikef on 04-08-2008 03:05 PM
Challenge: can anybody out there make this more efficient?
-philbo
I wrote a method that looks like this:
Which is pretty good, it always capitalises the first and last words, other than that it capitalises everything that isn't in the list of conjunctions, which obviously you could customise. If you wanted to avoid having to update code each time you thought of a new word you could make a picklist of values and pull them out with a describe call, meaning an administrator can add words to force to lower case as necessary.
I return a trim because I always add a space at the end of titlePhrase in preparation for the next word.
Greetings: I am looking to convert names to all Uppercase for several objects because of names such as McMillan or McDonald. What would be efficient code to accomplish this. Thanks
Thanks for this, it looks good. I want to this in such a way that every time we do an insert or an update, this method runs. Do you know of a way I can incorporate this in a trigger? Maybe a sample trigger?
Thanks,
-K
public static String toProperCase(String value) {
// Normalize - Convert to lowercase
value = value.toLowerCase();
// Hold each word
List<String> pieces = new List<String>();
// Split
for(String s : value.split(' ')) {
// Capitalize each piece
s = s.capitalize();
// Add to pieces
pieces.add(s);
}
// Join
return String.join(pieces, ' ');
}