web-dev-qa-db-fra.com

Capitaliser ou changer le cas d'une chaîne NSS en Objective-C

Je me demandais comment mettre en majuscule une chaîne trouvée dans un objet dans un NSMutableArray.

Un NSArray contient la chaîne 'April' à l'index 2.
Je veux que cela soit changé en 'APRIL'.

Y a-t-il quelque chose de simple comme ça?

viewNoteDateMonth.text  = [[displayDate objectAtIndex:2] capitalized];
136
n.evermind

Voilà

viewNoteDateMonth.text  = [[displayDate objectAtIndex:2] uppercaseString];

Btw:
"april" est lowercase[NSString lowercaseString] }
"APRIL" est UPPERCASE[NSString uppercaseString]
"April May" est Capitalized/Word Caps[NSString capitalizedString]
"April may" est Sentence caps(méthode manquante; voir la solution de contournement ci-dessous)

Par conséquent, ce que vous voulez s'appelle "majuscule" et non "en majuscule". ;)

En ce qui concerne "Sentence Caps", il faut garder à l'esprit qu'habituellement "Sentence" signifie "chaîne entière". Si vous souhaitez des phrases réelles, utilisez la deuxième méthode, ci-dessous, sinon la première:

@interface NSString ()

- (NSString *)sentenceCapitalizedString; // sentence == entire string
- (NSString *)realSentenceCapitalizedString; // sentence == real sentences

@end

@implementation NSString

- (NSString *)sentenceCapitalizedString {
    if (![self length]) {
        return [NSString string];
    }
    NSString *uppercase = [[self substringToIndex:1] uppercaseString];
    NSString *lowercase = [[self substringFromIndex:1] lowercaseString];
    return [uppercase stringByAppendingString:lowercase];
}

- (NSString *)realSentenceCapitalizedString {
    __block NSMutableString *mutableSelf = [NSMutableString stringWithString:self];
    [self enumerateSubstringsInRange:NSMakeRange(0, [self length])
                             options:NSStringEnumerationBySentences
                          usingBlock:^(NSString *sentence, NSRange sentenceRange, NSRange enclosingRange, BOOL *stop) {
        [mutableSelf replaceCharactersInRange:sentenceRange withString:[sentence sentenceCapitalizedString]];
    }];
    return [NSString stringWithString:mutableSelf]; // or just return mutableSelf.
}

@end
384
Regexident
20
theChrisKent

Si quelqu'un avait besoin de ce qui précède dans Swift:

Swift 3.0 et supérieur: 

cela va mettre votre chaîne en majuscule, faites la première lettre en majuscule: 

viewNoteDateMonth.text  = yourString.capitalized

cela va mettre votre chaîne en majuscule, en faisant toute la chaîne en majuscule: 

viewNoteDateMonth.text  = yourString.uppercased()
0
MhmdRizk