我想将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字符串的编码没有任何假设。
答案 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
以提高易读性。