Принятый ответ неверен. Во-первых, неправильно рассматривать единицы 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
, предоставленный внешним вызовом, в качестве аргумента диапазона.
person
Ken Thomases
schedule
12.07.2014