허용 된 대답은 잘못된 것입니다. 첫째, 사용자가 예상하는 의미에서 "문자"로 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
을 범위 인수로 전달하십시오.
완벽하게 작동합니다 !!!!!!!!!! Tks – wal
문자열의 길이가 항상 1 자 이상이어야하며 그렇지 않은 경우 throw 된 예외를 처리 할 준비가되었는지 확인하십시오. –
문자열을 대문자로 바꾸기 전에 if ([txt length]> 1) 확인을 추가하십시오. – looneydoodle