2013-08-29 16 views
7

を変更することなく、各単語の最初の文字を大文字にした文字列「ディノ・マックール」に文字列「恐竜マックール」を変換する簡単な方法はありますか?私はちょうど@"Dino Mccool"にObjC/iOSの - 他の文字

+0

は – tdelepine

答えて

16

を試してみてくださいになるだろう「capitalizedString」メソッドを使用して

。 これは、単語が空白文字以外の文字で区切られていても動作します:

NSString *str = @"dino mcCool. foo-bAR"; 
NSMutableString *result = [str mutableCopy]; 
[result enumerateSubstringsInRange:NSMakeRange(0, [result length]) 
          options:NSStringEnumerationByWords 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
     [result replaceCharactersInRange:NSMakeRange(substringRange.location, 1) 
           withString:[[substring substringToIndex:1] uppercaseString]]; 
}]; 
NSLog(@"%@", result); 
// Output: Dino McCool. Foo-BAR 
+0

NSStringEnumerationByWordsはわかりませんでしたが、ローカライズされていますか? – tdelepine

+0

@tdelepine:追加することができるNSStringEnumerationLocalizedオプションがあります:* "ユーザーのデフォルトロケールを使用して列挙を発生させます。これは、行、段落、または構成文字シーケンスの列挙に違いはありませんが、 "* –

+0

この投稿に感謝 – tdelepine

2

あなたは、文字列の単語を列挙し、個別に各単語を変更することができ、この

- (NSString *)capitilizeEachWord:(NSString *)sentence { 
    NSArray *words = [sentence componentsSeparatedByString:@" "]; 
    NSMutableArray *newWords = [NSMutableArray array]; 
    for (NSString *word in words) { 
     if (word.length > 0) { 
      NSString *capitilizedWord = [[[word substringToIndex:1] uppercaseString] stringByAppendingString:[word substringFromIndex:1]]; 
      [newWords addObject:capitilizedWord]; 
     } 
    } 
    return [newWords componentsJoinedByString:@" "]; 
} 
+0

MCとクールの間にスペースを追加するだけで複数のスペースが1つのスペースに崩壊していることに注意してください。 –

+0

@ MartinR、それは問題ですか? – NeverBe

+1

'capitalizedString'はすべてのスペースを保持しているので、それはちょっとした発言でした。 –

関連する問題