如何将NSString的fisrt字母大写,并删除任何重音?
例如,Àlter
,Alter
,alter
应成为 Alter
。
但是,/lter
,)lter
,:lter
应保持相同,因为第一个字符不是字母。
答案 0 :(得分:117)
请不要使用此方法。因为一个字母可能在不同语言中有不同的计数。您可以检查dreamlax答案。但我相信你会从我的回答中学到一些东西。快乐的编码:)
NSString *capitalisedSentence = nil;
//Does the string live in memory and does it have at least one letter?
if (yourString && yourString.length > 0) {
// Yes, it does.
capitalisedSentence = [yourString stringByReplacingCharactersInRange:NSMakeRange(0,1)
withString:[[yourString substringToIndex:1] capitalizedString]];
} else {
// No, it doesn't.
}
为什么我要关心字母数量?
如果您尝试访问(例如NSMakeRange
,substringToIndex
等)
像@""
这样的空字符串中的第一个字符,那么您的应用就会崩溃。为避免这种情况,您必须在处理之前验证它是否存在。
nil
会观察您发送给它的任何方法调用。
所以它会消化你尝试的任何东西,nil
是你的朋友。
答案 1 :(得分:91)
您可以使用NSString
:
- (NSString *)capitalizedString
或(iOS 6.0及以上版本):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
答案 2 :(得分:53)
由于您要删除变音符号,您可以将this method与常用字符串操作方法结合使用,如下所示:
/* create a locale where diacritic marks are not considered important, e.g. US English */
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"] autorelease];
NSString *input = @"Àlter";
/* get first char */
NSString *firstChar = [input substringToIndex:1];
/* remove any diacritic mark */
NSString *folded = [firstChar stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:locale];
/* create the new string */
NSString *result = [[folded uppercaseString] stringByAppendingString:[input substringFromIndex:1]];
答案 3 :(得分:2)
要删除我认为可以用来完成这一步骤的步骤列表。希望你能毫无疑问地坚持到底! :)
decomposedStringWithCanonicalMapping
分解任何重音(重要的是确保重音字符不会被不必要地删除)upperCaseString
将其转换为capitol字母,然后使用stringByReplacingCharactersInRange
将第一个字母替换回原始字符串。 [theString stringByReplacingOccurrencesOfString:@"
“withString:@”“]调用以删除任何留下的重音。这一切都应该大写你的第一个字母并删除任何重音:)
答案 4 :(得分:1)
我在类似情况下使用此方法,但我不确定是否要求将其他字母设为小写。
- (NSString *)capitalizedOnlyFirstLetter {
if (self.length < 1) {
return @"";
}
else if (self.length == 1) {
return [self capitalizedString];
}
else {
NSString *firstChar = [self substringToIndex:1];
NSString *otherChars = [self substringWithRange:NSMakeRange(1, self.length - 1)];
return [NSString stringWithFormat:@"%@%@", [firstChar uppercaseString], [otherChars lowercaseString]];
}
}
答案 5 :(得分:1)
从iOS 9.0开始,有一种方法可以使用当前语言环境来大写字符串:
@property(readonly, copy) NSString *localizedCapitalizedString;
答案 6 :(得分:0)
仅仅为了添加一些选项,我使用此类别来大写NSString
的第一个字母。
@interface NSString (CapitalizeFirst)
- (NSString *)capitalizeFirst;
- (NSString *)removeDiacritic;
@end
@implementation NSString (CapitalizeFirst)
- (NSString *)capitalizeFirst {
if ( self.length <= 1 ) {
return [self uppercaseString];
}
else {
return [[[[self substringToIndex:1] removeDiacritic] uppercaseString] stringByAppendingString:[[self substringFromIndex:1] removeDiacritic]];
// Or: return [NSString stringWithFormat:@"%@%@", [[[self substringToIndex:1] removeDiacritic] uppercaseString], [[self substringFromIndex:1] removeDiacritic]];
}
}
- (NSString *)removeDiacritic { // Taken from: http://stackoverflow.com/a/10932536/1986221
NSData *data = [NSData dataUsingEncoding:NSASCIIStringEncoding
allowsLossyConversion:YES];
return [[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding];
}
@end
然后你可以简单地打电话:
NSString *helloWorld = @"hello world";
NSString *capitalized = [helloWorld capitalizeFirst];
NSLog(@"%@ - %@", helloWorld, capitalized);