capitalizedString没有正确地大写以数字开头的单词?

时间:2012-03-07 16:10:47

标签: objective-c cocoa

我正在使用NSString方法[myString capitalizedString]来大写字符串中的所有单词。

但是对于以数字开头的单词,大写不起作用。

i.e. 2nd chance

变为

2Nd Chance

即使n不是单词的第一个字母。

感谢

2 个答案:

答案 0 :(得分:5)

您必须针对此问题推出自己的解决方案。 Apple docs表示您可能无法使用该函数获取多字符串和具有特殊字符的字符串的指定行为。这是一个非常粗糙的解决方案

NSString *text = @"2nd place is nothing";

// break the string into words by separating on spaces.
NSArray *words = [text componentsSeparatedByString:@" "];

// create a new array to hold the capitalized versions.
NSMutableArray *newWords = [[NSMutableArray alloc]init];

// we want to ignore words starting with numbers.
// This class helps us to determine if a string is a number.
NSNumberFormatter *num = [[NSNumberFormatter alloc]init];

for (NSString *item in words) {
    NSString *word = item; 
    // if the first letter of the word is not a number (numberFromString returns nil)
    if ([num numberFromString:[item substringWithRange:NSMakeRange(0, 1)]] == nil) {
        word = [item capitalizedString]; // capitalize that word.
    } 
    // if it is a number, don't change the word (this is implied).
    [newWords addObject:word]; // add the word to the new list.
}

NSLog(@"%@", [newWords description]);

答案 1 :(得分:1)

不幸的是,这似乎是capitalizedString的一般行为。

也许一个不那么好的解决方法/黑客将在转换之前用字符串替换每个数字,然后再将其更改回来。

所以,“第二次机会” - > “xyznd chance” - > “Xyznd Chance” - > “第二次机会”