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.
}
/* 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]];
7条答案
按热度按时间ct2axkht1#
请不要使用这个方法。因为一个字母在不同的语言中可能有不同的计数。你可以检查dreamlax的答案。但我相信你会从我的答案中学到一些东西。
我为什么要关心字母的数量?
如果您尝试访问(例如
NSMakeRange
、substringToIndex
等)空字符串(如@""
)中的第一个字符,则您的应用将崩溃。为避免这种情况,您必须在处理之前验证它是否存在。如果我的字符串为零呢?
尼尔先生:* 我是“尼尔”。* 我能消化你发给我的任何东西。我不会让你的应用程序自己崩溃的。)
nil
将观察您发送给它的任何方法调用。所以它会消化你在上面尝试的任何东西,
nil
是你的朋友。mv1qrgav2#
您可以使用
NSString
的:- (NSString *)capitalizedString
或(iOS 6.0及更高版本):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
1zmg4dgp3#
由于您希望删除发音符号,因此可以将此方法与常见的字符串操作方法结合使用,如下所示:
xurqigkl4#
我会列出一系列步骤,我认为你可以用来完成这件事。希望你能毫无疑问地坚持到底
decomposedStringWithCanonicalMapping
分解任何重音符号(重要的是要确保重音符号不会被不必要地删除)upperCaseString
将其转换为大写字母,并使用stringByReplacingCharactersInRange
将第一个字母替换回原始字符串。[theString stringByReplacingOccurrencesOfString:@"
“withString:@""]'排序调用,以删除任何剩余的重音符号。这一切都应该大写你的第一个字母,并删除任何口音:)
lkaoscv75#
从iOS 9.0开始,有一种方法可以使用当前区域设置大写字符串:
2w2cym1i6#
我在类似的情况下使用这个方法,但我不确定是否问其他字母小写。
nkhmeac67#
为了添加一些选项,我使用这个类别来大写
NSString
的首字母。然后你可以简单地调用: