正如标题所说,我需要格式化一串文本,格式如下:“你好,世界。你好吗?” 进入“你好,世界。你好吗?”,在 iOS 中是否有任何标准方法可以做到这一点?或者有任何示例代码吗?
谢谢!
正如标题所说,我需要格式化一串文本,格式如下:“你好,世界。你好吗?” 进入“你好,世界。你好吗?”,在 iOS 中是否有任何标准方法可以做到这一点?或者有任何示例代码吗?
谢谢!
我不知道执行此操作的标准方法,而且我认为没有。
但是NSString
提供了这样的方法:-(NSString *)capitalizedString;
它返回一个新字符串,每个单词的第一个字符都是大写的。正确断开您的字符串后,您可以使用它。还可以考虑使用 : 获取小写字符串-(NSString *)lowercaseString
。
没有直接的方法将段落中句子的第一个字符大写。NSString只是有一个方法capitalizedString将每个单词都大写。您必须创建自己的逻辑来实现这一点。你可以试试下面的代码。
- (NSString *)captilizeParagraph:(NSString *)paragraph {
if ([paragraph length] == 0) return paragraph;
NSArray *sentences = [paragraph componentsSeparatedByString:@". "];
NSMutableArray *capitalizedSentences = [NSMutableArray array];
for (NSString *sentence in sentences) {
sentence = [sentence lowercaseString];
sentence = [sentence stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[sentence substringToIndex:1] uppercaseString]];
[capitalizedSentences addObject:sentence];
}
NSString *capitalizedParagrah = [capitalizedSentences componentsJoinedByString:@". "];
return capitalizedParagrah;
}
注意:上面的代码假设段落中的所有句子都以字符". "
(一个点和一个空格)结尾,除了最后一句(它可以以任何字符结尾)。"? "
如果句子以or等其他字符结尾"! "
,则此方法将返回未完全格式化的字符串。
-(NSString *)normalizeString{
__block NSString *string = [self lowercaseString];
string = [string stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:[[string substringToIndex:1] uppercaseString]];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\\p{P}-[,]]" options:0 error:nil];
[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
if(result.range.location + 2 < string.length) string = [string stringByReplacingCharactersInRange:NSMakeRange(result.range.location + 2, 1) withString:[[self substringWithRange:NSMakeRange(result.range.location + 2, 1)] uppercaseString]];
}];
return string;
}
假设标点符号后的 2 个字符是下一个句子的第一个字符,这是可行的。