wal*_*wal 34 string cocoa objective-c capitalization nsstring
我已经找到了如何大写句子的所有单词,但不仅仅是第一个单词.
NSString *txt =@"hi my friends!"
[txt capitalizedString];
Run Code Online (Sandbox Code Playgroud)
我不想改成小写并将第一个字符大写.我想把第一个单词大写,而不改变其他单词.
Joh*_*ool 118
这是另一个进展:
NSString *txt = @"hi my friends!";
txt = [txt stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[txt substringToIndex:1] uppercaseString]];
Run Code Online (Sandbox Code Playgroud)
对于Swift语言:
txt.replaceRange(txt.startIndex...txt.startIndex, with: String(txt[txt.startIndex]).capitalizedString)
Run Code Online (Sandbox Code Playgroud)
Ken*_*ses 15
接受的答案是错误的.首先,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;
}];
Run Code Online (Sandbox Code Playgroud)
字符串的第一个单词可能与字符串第一个单词的第一个单词不同.要识别字符串的第一个(或每个)句子,然后将其中的第一个单词(或那些单词)大写,则在外部调用-enumerateSubstringsInRange:options:usingBlock:using中包围上面的单词NSStringEnumerationBySentences | NSStringEnumerationLocalized.在内部调用中,将substringRange外部调用提供的内容作为范围参数传递.
使用
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator
Run Code Online (Sandbox Code Playgroud)
并将数组中的第一个对象大写,然后使用
- (NSString *)componentsJoinedByString:(NSString *)separator
Run Code Online (Sandbox Code Playgroud)
加入他们