正如標題所說,我需要格式化一串文本,格式如下:「你好,世界,你好嗎?」到「你好,世界,你好嗎?」,有沒有在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