Wykorzystaj wielką literę lub zmień wielkość liter w NSString w Objective-C

140

Zastanawiałem się, jak wpisać wielką literę ciąg znaleziony w obiekcie w pliku NSMutableArray.

An NSArrayzawiera ciąg 'April'pod indeksem 2.
Chcę, aby to zostało zmienione na 'APRIL'.

Czy jest coś takiego prostego?

viewNoteDateMonth.text  = [[displayDate objectAtIndex:2] capitalized];
nieważne
źródło

Odpowiedzi:

391

Proszę bardzo:

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

Btw:
"april"is lowercase[NSString lowercaseString]
"APRIL" is UPPERCASE[NSString uppercaseString]
"April May" is Capitalized/Word Caps[NSString capitalizedString]
"April may" to Sentence caps(brak metody; zobacz obejście poniżej)

Stąd to, co chcesz, jest nazywany „ wielka ”, a nie „ aktywowane ”. ;)

W przypadku „wielkich liter w zdaniach” należy pamiętać, że zwykle „zdanie” oznacza „cały ciąg znaków”. Jeśli chcesz prawdziwych zdań, użyj drugiej metody, poniżej, w przeciwnym razie pierwszej:

@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
Regexident
źródło
1

Na wypadek, gdyby ktoś potrzebował powyższego szybko:

SWIFT 3.0 i nowsze:

w ten sposób Twój ciąg zostanie zamieniony na wielką literę, a pierwsza litera będzie wielka:

viewNoteDateMonth.text  = yourString.capitalized

spowoduje to wielkie litery w ciągu, a wszystkie litery będą wielkie:

viewNoteDateMonth.text  = yourString.uppercased()
MhmdRizk
źródło