格式化来自“HELLO,WORLD。你怎么样?” “你好,世界。你好吗?”在ObjC(iOS)?

时间:2011-07-21 08:56:59

标签: objective-c ios nsstring format capitalization

正如标题所说,我需要格式化一串文字,格式如下:“你好,世界。你怎么样?”进入“你好,世界。你好吗?”,在iOS中有没有任何标准方法可以做到这一点?或者有任何示例代码吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

我不知道这样做的标准方法,我认为没有 但是NSString提供了这样的方法:-(NSString *)capitalizedString;返回一个新字符串,每个字的第一个字符大写。正确破坏你的字符串后你可以使用它。还要考虑使用以下方法获取小写字母:-(NSString *)lowercaseString

答案 1 :(得分:1)

没有直接的方法可以将段落中句子的第一个字符大写。 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;
}

注意:上面的代码假设段落中的所有句子都以字符". "(一个点和一个空格)结尾,但最后一个句子除外(它可以以任何字符结尾) 。如果一个句子以"? ""! "等其他字符结尾,则此方法将返回未完全格式化的字符串。

答案 2 :(得分:0)

-(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个字符是下一个句子的第一个字符,则可以正常工作。