Принятый ответ неверен. Во-первых, неправильно воспринимать единицы измерения NSString
как «символы» в том смысле, в котором их ожидает пользователь. Есть суррогатные пары. Есть комбинирующие последовательности. Их разделение приведет к неверным результатам. Во-вторых, это не обязательно тот случай, когда верхний регистр первого символа дает тот же результат, что и заглавная буква слова, содержащего этот символ. Языки могут быть контекстно-зависимыми.
Правильный способ сделать это - заставить фреймворки идентифицировать слова (и, возможно, предложения) в соответствии с локалью. А также использовать заглавные буквы в соответствии с региональными стандартами.
[aMutableString enumerateSubstringsInRange:NSMakeRange(0, [aMutableString length])
options:NSStringEnumerationByWords | NSStringEnumerationLocalized
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[aMutableString replaceCharactersInRange:substringRange
withString:[substring capitalizedStringWithLocale:[NSLocale currentLocale]]];
*stop = YES;
}];
Возможно, что первое слово строки не совпадает с первым словом первого предложения строки. Чтобы определить первое (или каждое) предложение строки, а затем использовать заглавные буквы первого (или тех) слова, заключите его во внешний вызов -enumerateSubstringsInRange:options:usingBlock:
, используя NSStringEnumerationBySentences | NSStringEnumerationLocalized
. Во внутреннем вызове передайте substringRange
, предоставленный внешним вызовом, в качестве аргумента диапазона.