正如标题所说,我需要格式化一串文本,格式如下:“你好,世界,你好吗?”到“你好,世界,你好吗?”,有没有在iOS中做这个的标准方法?或者是否有任何示例代码?设置“HELLO,WORLD。”的文本格式。你好吗?以“你好,世界,你好吗?”在ObjC(iOS)?
谢谢!
正如标题所说,我需要格式化一串文本,格式如下:“你好,世界,你好吗?”到“你好,世界,你好吗?”,有没有在iOS中做这个的标准方法?或者是否有任何示例代码?设置“HELLO,WORLD。”的文本格式。你好吗?以“你好,世界,你好吗?”在ObjC(iOS)?
谢谢!
在段落中没有直接的方法来大写句子的第一个字符。 NSString只是有一个方法大写字母它大写每个单词。你必须创建自己的逻辑来实现这一点。你可以尝试下面的代码。
- (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;
}
注:上面的代码假定在段落中的所有句子除了最后一句(它可以与任何字符结尾)字符". "
(点和一个空格)结束。如果一个句子以"? "
或"! "
等其他字符结尾,则此方法将返回一个未完全格式化的字符串。
我不知道标准方法做到这一点,我不认为有一个。
但NSString
提供了这样的方法:-(NSString *)capitalizedString;
它返回一个新的字符串,大写的每个单词的第一个字符。正确地打破你的字符串后,你可以使用它。还请考虑使用以下字符串来获取字符串:-(NSString *)lowercaseString
。
-(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个字符是下一个句子的第一个字符,这是有效的。
非常感谢,我会尽力改进以适应我的需求。谢谢! – hzxu
如果我替换[段componentsSeparatedByString:@“。”];与[段componentsseparatedByString:@“。?!”]; ? – hzxu
不会。如果你这样做,只有当它们以字符串“@”结尾时,它才会拆分字符串。你可以使用'componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@“?!。”]',但是在大写之后,你很难将它们再次加入* capitalizedParagrah *。 – EmptyStack