将NSString的单个字符设置为大写的简便方法

时间:2009-05-19 16:52:20

标签: cocoa cocoa-touch nsstring

我想将NSString的第一个字符更改为大写。不幸的是,- (NSString *)capitalizedString将每个单词的第一个字母转换为大写。有一种简单的方法可以将单个字符转换为大写吗?

我目前正在使用:

NSRange firstCharRange = NSMakeRange(0,1);
NSString* firstCharacter = [dateString substringWithRange:firstCharRange];
NSString* uppercaseFirstChar = [firstCharacter originalString];
NSMutableString* capitalisedSentence = [originalString mutableCopy];
[capitalisedSentence replaceCharactersInRange:firstCharRange withString:uppercaseFirstChar];

这看起来有点复杂,但至少对底层unicode字符串的编码没有任何假设。

5 个答案:

答案 0 :(得分:17)

与你所拥有的非常类似的方法,但更加紧缩:

 NSString *capitalisedSentence = 
    [dateString stringByReplacingCharactersInRange:NSMakeRange(0,1)  
    withString:[[dateString  substringToIndex:1] capitalizedString]];

答案 1 :(得分:3)

由于NSString是不可变的,所以你所拥有的似乎是做你想做的事情的好方法。 (NSString*)uppercaseString和类似方法的实现可能看起来非常类似于您编写的内容,因为它们返回新的NSString而不是修改您发送消息的方法。

答案 2 :(得分:1)

我有类似的要求,但它是字符串中的字符。假设我是你想要大写的字符的索引,这对我有用:

curword = [curword stringByReplacingCharactersInRange:NSMakeRange(i,1) 
           withString:[[curword substringWithRange:NSMakeRange(i, 1)] capitalizedString]];

答案 3 :(得分:1)

如果您对这些解决方案进行分析,那么它们会慢得多:

NSMutableString *capitolziedString = [NSMutableString stringWithString:originalString];
NSString *firstChar = [[capitolziedString substringWithRange:NSMakeRange(0,1)] uppercaseString];
[capitolziedString replaceCharactersInRange:NSMakeRange(0, 1) withString:firstChar];

在运行iOS 5的iphone 4上进行测试:
@ doomspork的解决方案运行时间为0.115750毫秒 而上面的运行时间为0.064250毫秒;

在运行iOS 5的模拟器上进行测试:
@ doomspork的解决方案在0.021232毫秒时运行 而上面的运行时间为0.007495毫秒;

答案 4 :(得分:1)

为了最大限度地提高可读性,请在category上设置NSString并为其提供此功能:

NSString *capitalizeFirstLetter(NSString *string) {
    NSString *firstCapital = [string substringToIndex:1].capitalizedString;
    return [string stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:firstCapital];
}

然后在你想要的代码中:

NSString *capitalizedSentence = capitalizeFirstLetter(dateString);

这种代码很少属于您需要的地方,通常应该考虑到实用程序类或category以提高易读性。