タイトルにあるように、テキストの文字列を「HELLO、WORLD。HOWAREYOU?」のような形式でフォーマットする必要があります。「Hello、world。お元気ですか?」に、iOSでこれを行うための標準的な方法はありますか?または、サンプルコードはありますか?
ありがとう!
タイトルにあるように、テキストの文字列を「HELLO、WORLD。HOWAREYOU?」のような形式でフォーマットする必要があります。「Hello、world。お元気ですか?」に、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;
}
注:上記のコードは、段落内のすべての文が". "
最後の文(任意の文字で終了できます)を除いて文字(ドットとスペース)で終わることを前提としています。文がまたはのような他の文字で終わる場合、"? "
この"! "
メソッドは完全にフォーマットされていない文字列を返します。
-(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文字が次の文の最初の文字であると仮定すると、これは機能します。