iphone - Primera letra mayúscula en NSString
ios uppercase (7)
Dado que desea eliminar las marcas diacríticas, puede utilizar este método en combinación con los métodos comunes de manipulación de cadenas, como este:
/* create a locale where diacritic marks are not considered important, e.g. US English */
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"] autorelease];
NSString *input = @"Àlter";
/* get first char */
NSString *firstChar = [input substringToIndex:1];
/* remove any diacritic mark */
NSString *folded = [firstChar stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:locale];
/* create the new string */
NSString *result = [[folded uppercaseString] stringByAppendingString:[input substringFromIndex:1]];
¿Cómo puedo mayúsculo de la primera letra de un NSString y eliminar cualquier acento?
Por ejemplo, Àlter
, Alter
, alter
debería convertirse en Alter
.
Pero, /lter
, )lter
:lter
debería permanecer igual , ya que el primer carácter no es una letra.
Desde iOS 9.0 hay un método para capitalizar cadenas usando la configuración regional actual:
@property(readonly, copy) NSString *localizedCapitalizedString;
Estoy usando este método para situaciones similares, pero no estoy seguro de si la pregunta pidió que otras letras sean minúsculas.
- (NSString *)capitalizedOnlyFirstLetter {
if (self.length < 1) {
return @"";
}
else if (self.length == 1) {
return [self capitalizedString];
}
else {
NSString *firstChar = [self substringToIndex:1];
NSString *otherChars = [self substringWithRange:NSMakeRange(1, self.length - 1)];
return [NSString stringWithFormat:@"%@%@", [firstChar uppercaseString], [otherChars lowercaseString]];
}
}
Puedes usar NSString
:
- (NSString *)capitalizedString
o (iOS 6.0 y superior):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
Solo por agregar algunas opciones, utilizo esta categoría para poner en mayúscula la primera letra de un NSString
.
@interface NSString (CapitalizeFirst)
- (NSString *)capitalizeFirst;
- (NSString *)removeDiacritic;
@end
@implementation NSString (CapitalizeFirst)
- (NSString *)capitalizeFirst {
if ( self.length <= 1 ) {
return [self uppercaseString];
}
else {
return [[[[self substringToIndex:1] removeDiacritic] uppercaseString] stringByAppendingString:[[self substringFromIndex:1] removeDiacritic]];
// Or: return [NSString stringWithFormat:@"%@%@", [[[self substringToIndex:1] removeDiacritic] uppercaseString], [[self substringFromIndex:1] removeDiacritic]];
}
}
- (NSString *)removeDiacritic { // Taken from: http://.com/a/10932536/1986221
NSData *data = [NSData dataUsingEncoding:NSASCIIStringEncoding
allowsLossyConversion:YES];
return [[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding];
}
@end
Y luego puedes simplemente llamar:
NSString *helloWorld = @"hello world";
NSString *capitalized = [helloWorld capitalizeFirst];
NSLog(@"%@ - %@", helloWorld, capitalized);
Voy a dejar caer una lista de pasos que creo que puedes usar para hacer esto. Espero que puedas seguir adelante sin problemas. :)
- Utilice
decomposedStringWithCanonicalMapping
para descomponer los acentos (Importante para asegurarse de que los caracteres acentuados no se eliminen innecesariamente) - Use characterAtIndex: para extraer la primera letra (índice 0), use
upperCaseString
para convertirlo en letrasstringByReplacingCharactersInRange
y usestringByReplacingCharactersInRange
para reemplazar la primera letra en la cadena original. - En este paso, ANTES de convertirlo en mayúscula, puede verificar si la primera letra es uno de los caracteres que no desea reemplazar, por ejemplo, ":" o ";", y si lo está, no complete el resto. del procedimiento.
- Realice un tipo de llamada
[theString stringByReplacingOccurrencesOfString:@"
" withString: @ ""] `para eliminar los acentos sobrantes.
Todo esto debería capitalizar su primera letra Y eliminar los acentos :)
Por favor NO use este método. Porque una letra puede tener un conteo diferente en diferentes idiomas. Puedes verificar la respuesta de dreamlax para eso. Pero estoy seguro de que aprenderías algo de mi respuesta. Feliz codificación :)
NSString *capitalisedSentence = nil;
//Does the string live in memory and does it have at least one letter?
if (yourString && yourString.length > 0) {
// Yes, it does.
capitalisedSentence = [yourString stringByReplacingCharactersInRange:NSMakeRange(0,1)
withString:[[yourString substringToIndex:1] capitalizedString]];
} else {
// No, it doesn''t.
}
¿Por qué debería importarme el número de letras?
Si intenta acceder (por ejemplo, NSMakeRange
, substringToIndex
, etc.) al primer carácter de una cadena vacía como @""
, su aplicación se bloqueará. Para evitar esto, debe verificar que exista antes de procesarlo.
¿Qué pasa si mi cuerda era nula?
Mr.Nil: estoy ''nil''. Puedo digerir todo lo que me envíes. No permitiré que tu aplicación se cuelgue sola. ;)
nil
observará cualquier método de llamada que le envíe.
Por lo tanto, va a digerir todo lo que intentes, nada es tu amigo.