objective c - Capitalizar o cambiar el caso de un NSString en Objective-C
cocoa-touch uppercase (2)
Me preguntaba cómo capitalizar una cadena encontrada en un objeto en un NSMutableArray
.
Un NSArray
contiene la cadena ''April''
en el índice 2.
Quiero que esto se cambie a ''APRIL''
.
¿Hay algo simple como esto?
viewNoteDateMonth.text = [[displayDate objectAtIndex:2] capitalized];
Aqui tienes:
viewNoteDateMonth.text = [[displayDate objectAtIndex:2] uppercaseString];
Por cierto:
"april"
está en lowercase
➔ [NSString lowercaseString]
"APRIL"
es UPPERCASE
➔ [NSString uppercaseString]
"April May"
está en Capitalized/Word Caps
➔ [NSString capitalizedString]
"April may"
es Sentence caps
➔ (método que falta, ver solución alternativa a continuación)
Por lo tanto, lo que quiere se llama " mayúscula ", no "con mayúscula ". ;)
En cuanto a "Sentence Caps", hay que tener en cuenta que generalmente "Sentence" significa "cadena completa". Si desea oraciones reales use el segundo método, a continuación, de lo contrario, el primero:
@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
viewNoteDateMonth.text = [[displayDate objectAtIndex:2] uppercaseString];
También puede usar lowercaseString y capitalizedString