Split a CamelCase string into separate words
Objective: Split a CameCase string such as `iLikeNames' into separate words ("I Like Names").
So I was looking for a way to do this online but found nothing. There was some recommendations on using regex to do it but I thought that was way to messy for such a simple tasks.
Therefore I spent some time writing my own implementation and this is what I came up with. It is tested and passed all my tests. Although the code is a bit long but it gets the job done. There might be a cleaner way to do this so any suggestions are welcome:
This is to be used as a category for NSString.
- (NSString *)splitOnCapital
{
// Make a index of uppercase characters
NSRange upcaseRange = NSMakeRange('A', 26);
NSIndexSet *upcaseSet = [NSIndexSet indexSetWithIndexesInRange:upcaseRange];
// Split our camecase word
NSMutableString *result = [NSMutableString string];
NSMutableString *oneWord = [NSMutableString string];
for (int i = 0; i < self.length; i++) {
char oneChar = [self characterAtIndex:i];
if ([upcaseSet containsIndex:oneChar]) {
// Found a uppercase char, now save previous word
if (result.length == 0) {
// First word, no space in beginning
[result appendFormat:@"%@", [oneWord capitalizedString]];
}else {
[result appendFormat:@" %@", oneWord];
}
// Clear previous word for new word
oneWord = [NSMutableString string];
}
[oneWord appendFormat:@"%c", oneChar];
}
// Add last word
if (oneWord.length > 0) {
[result appendFormat:@" %@", oneWord];
}
return result;
}
Written by Draco Li
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#