Прописать или изменить регистр NSString в Objective-C - PullRequest
138 голосов
/ 07 апреля 2011

Мне было интересно, как использовать заглавную строку, найденную в объекте в NSMutableArray.

NSArray содержит строку 'April' с индексом 2.
Я хочу, чтобы это было измененона 'APRIL'.

Есть ли что-то простое, как это?

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

Ответы [ 3 ]

388 голосов
/ 07 апреля 2011

Вот, пожалуйста,

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

Кстати:
"april" равно lowercase [NSString lowercaseString]
"APRIL" равно UPPERCASE [NSString uppercaseString]
"April May" равно Capitalized/Word Caps [NSString capitalizedString]
"April may" равно Sentence caps(метод отсутствует; см.Обходное решение ниже)

Следовательно, то, что вы хотите, называется " заглавными буквами ", а не " заглавными буквами ".;)

Что касается "Заглавных букв предложения", следует иметь в виду, что обычно "Предложение" означает "всю строку".Если вы хотите получить реальные предложения, используйте второй метод, ниже, в противном случае первый:

@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
20 голосов
/ 07 апреля 2011
viewNoteDateMonth.text  = [[displayDate objectAtIndex:2] uppercaseString];

Документация: http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/uppercaseString

Вы также можете использовать lowercaseString и capitalizedString

1 голос
/ 14 ноября 2018

В случае, если кому-то понадобится вышеперечисленное в swift:

SWIFT 3.0 и выше:

, это сделает заглавной строку вашей, сделайте заглавную первую букву:

viewNoteDateMonth.text  = yourString.capitalized

это будет заглавной строкой вашей строки, сделайте всю строку заглавными:

viewNoteDateMonth.text  = yourString.uppercased()
...