Iphone 字符串中大写的第一个字母
如何将NSString的第一个字母大写,并删除任何重音符号 例如,Iphone 字符串中大写的第一个字母,iphone,ios,uppercase,Iphone,Ios,Uppercase,如何将NSString的第一个字母大写,并删除任何重音符号 例如,Alter,Alter,Alter应该变成Alter 但是,/lter,)lter,:lter应该保持不变,因为第一个字符不是字母 请不要使用此方法。因为一个字母在不同的语言中可能有不同的计数。你可以查看dreamlax的答案。但我相信你会从我的回答中学到一些东西。快乐编码:) 我为什么要关心字母的数量? 如果您尝试访问(例如NSMakeRange,substringToIndex等) 空字符串(如@“)中的第一个字符,则应用程序
Alter
,Alter
,Alter
应该变成Alter
但是,
/lter
,)lter
,:lter
应该保持不变,因为第一个字符不是字母 请不要使用此方法。因为一个字母在不同的语言中可能有不同的计数。你可以查看dreamlax的答案。但我相信你会从我的回答中学到一些东西。快乐编码:)
我为什么要关心字母的数量?
如果您尝试访问(例如NSMakeRange
,substringToIndex
等)
空字符串(如@“
)中的第一个字符,则应用程序将崩溃。为了避免这种情况,您必须在对其进行处理之前验证它是否存在
如果我的字符串是零呢?
奈尔先生:我是‘零’。你寄给我的任何东西我都能消化。我不会允许你的应用程序自行崩溃。;)
nil
将观察您发送给它的任何方法调用
因此,它将消化您在其上尝试的任何内容,
nil
是您的朋友。由于您希望删除变音符号,您可以与常见的字符串操作方法结合使用,如下所示:
/* 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]];
我会列出一个步骤清单,我想你可以用它来完成这件事。希望你能毫无疑问地坚持下去!:)
- 使用
分解任何重音符号(重要的是确保重音符号不会被不必要地删除)decomposedStringWithCanonicalMapping
- 使用字符索引:要提取第一个字母(索引0),请使用
将其转换为国会大厦字母,并使用大写字符串
将第一个字母替换回原始字符串李>stringByReplacingCharactersInRange
- 在此步骤中,在将其转换为大写之前,您可以检查第一个字母是否是您不想替换的字符之一,例如“:”或“;”,如果是,则不要继续执行其余过程
- 执行一个
”with string:@”“]排序调用,以删除任何剩余的重音符号[字符串字符串通过replacingoccurrencesofstring:@“
这一切都应该大写你的第一个字母,并删除任何重音:)你可以使用
NSString
:
或(iOS 6.0及以上版本):
我在类似情况下使用此方法,但我不确定问题是否要求其他字母小写
- (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]];
}
}
-(NSString*)大写首字母{
如果(自身长度<1){
返回@”;
}
else if(self.length==1){
返回[自资本化];
}
否则{
NSString*firstChar=[self substringToIndex:1];
NSString*otherChars=[self substringWithRange:NSMakeRange(1,self.length-1)];
返回[NSString stringWithFormat:@“%@%@”,[firstChar uppercaseString],[otherChars lowercaseString];
}
}
仅为了添加一些选项,我使用此类别将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
自iOS 9.0以来,有一种使用当前语言环境将字符串大写的方法:
@property(readonly, copy) NSString *localizedCapitalizedString;
大写字符串只更改了第一个字母,因此选择它是无用的。问题是它不能消除重音。ThankscapitalizedString将NSString中每个单词的第一个字母大写。这个答案对于只大写一个句子的第一个字母很有用。虽然非常简单,但解决方案是错误的。想象一种情况,几个字母应该大写,而不仅仅是第一个字母。这里的一个很好的例子是Dutch及其IJ对。当涉及到大写时,您应该始终使用locale。同样,这并不能完全回答OP的问题。这仅大写第一个字符,但不删除变音符号。使用硬编码的
NSMakeRange(0,1)
是不正确的(因为第一个字母可能跨越多个字符)。有关解决方案,请参阅@dreamlax答案中的我的评论。capitalizedString
在iOS 2.0版本中可用。所有字母都用小写,第一个字母只用大写one@VanDuTran:除了它没有完全回答OPs问题(指定删除任何重音)。此解决方案有一个潜在问题:对于给定的字符串\u whatever
,它将转换为\u whatever
。被否决。一些语言,例如荷兰语,有向图,如IJ,因此需要两个字母的大写:@AliakseiN.:原始问题中没有指定。OP希望删除变音符号并仅大写第一个字母,因此我假设他/她不希望保留任何特定于语言环境的正字法。此代码存在一个小错误,因为它假设第一个字母的长度为1个字符,这对于UTF字符串来说是不正确的。相反,它应该调用NSString*firstChar=[input substringWithRange:[input rangeOfComposedCharacterSequenceAtIndex:0]
,然后使用[input substringFromIndex:firstChar.length]
NSString *helloWorld = @"hello world";
NSString *capitalized = [helloWorld capitalizeFirst];
NSLog(@"%@ - %@", helloWorld, capitalized);
@property(readonly, copy) NSString *localizedCapitalizedString;