uso una str separar reglas reemplazar rae qué por palabras palabra municipio mayusculas mayuscula inicio hospital hace función funcion escribir escribe eliminar cuando contar con comparar caracteres caracter capital cadenas cadena cada objective-c string cocoa nsstring capitalization

objective-c - una - reemplazar caracteres en python



¿Cómo se escribe en mayúscula la primera palabra de la oración en Objective-C? (9)

Aquí hay otra oportunidad:

NSString *txt = @"hi my friends!"; txt = [txt stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[txt substringToIndex:1] uppercaseString]];

Para el lenguaje Swift:

txt.replaceRange(txt.startIndex...txt.startIndex, with: String(txt[txt.startIndex]).capitalizedString)

Ya he encontrado cómo utilizar todas las palabras de la oración, pero no solo la primera palabra.

NSString *txt =@"hi my friends!" [txt capitalizedString];

No quiero cambiar a minúsculas y poner en mayúscula el primer carácter. Me gustaría poner en mayúscula la primera palabra solo sin cambiar los demás.


En swift puedes hacerlo de la siguiente manera usando esta extensión:

extension String { func ucfirst() -> String { return (self as NSString).stringByReplacingCharactersInRange(NSMakeRange(0, 1), withString: (self as NSString).substringToIndex(1).uppercaseString) } }

llamando a su cadena de esta manera:

var ucfirstString:String = "test".ucfirst()


La respuesta aceptada es incorrecta. Primero, no es correcto tratar las unidades de NSString como "personajes" en el sentido que un usuario espera. Hay pares sustitutos. Hay secuencias de combinación. Dividirlos producirá resultados incorrectos. En segundo lugar, no es necesariamente el caso de que aplicar el primer carácter al upper produce el mismo resultado que capitalizar una palabra que contiene ese carácter. Los idiomas pueden ser sensibles al contexto.

La forma correcta de hacerlo es hacer que los marcos identifiquen las palabras (y posiblemente las oraciones) en la forma apropiada para la configuración regional. Y también para capitalizar en la forma apropiada para la localidad.

[aMutableString enumerateSubstringsInRange:NSMakeRange(0, [aMutableString length]) options:NSStringEnumerationByWords | NSStringEnumerationLocalized usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { [aMutableString replaceCharactersInRange:substringRange withString:[substring capitalizedStringWithLocale:[NSLocale currentLocale]]]; *stop = YES; }];

Es posible que la primera palabra de una cadena no sea la misma que la primera palabra de la primera frase de una cadena. Para identificar la primera (o cada una) frase de la cadena y luego -enumerateSubstringsInRange:options:usingBlock: mayúscula la primera palabra de esa (o esas), rodee lo anterior en una invocación externa de -enumerateSubstringsInRange:options:usingBlock: using NSStringEnumerationBySentences | NSStringEnumerationLocalized NSStringEnumerationBySentences | NSStringEnumerationLocalized . En la invocación interna, pase el substringRange proporcionado por la invocación externa como argumento de rango.


Por el bien de tener opciones, sugeriría:

NSString *myString = [NSString stringWithFormat:@"this is a string..."]; char *tmpStr = calloc([myString length] + 1,sizeof(char)); [myString getCString:tmpStr maxLength:[myString length] + 1 encoding:NSUTF8StringEncoding]; int sIndex = 0; /* skip non-alpha characters at beginning of string */ while (!isalpha(tmpStr[sIndex])) { sIndex++; } toupper(tmpStr[sIndex]); myString = [NSString stringWithCString:tmpStr encoding:NSUTF8StringEncoding];

Estoy en el trabajo y no tengo mi Mac para probar esto, pero si [myString cStringUsingEncoding:NSUTF8StringEncoding] no recuerdo, no podría usar [myString cStringUsingEncoding:NSUTF8StringEncoding] porque devuelve un const char * .


Sé que la pregunta requiere específicamente una respuesta del Objetivo C, sin embargo, aquí hay una solución para Swift 2.0:

let txt = "hi my friends!" var sentencecaseString = "" for (index, character) in txt.characters.enumerate() { if 0 == index { sentencecaseString += String(character).uppercaseString } else { sentencecaseString.append(character) } }

O como una extensión:

func sentencecaseString() -> String { var sentencecaseString = "" for (index, character) in self.characters.enumerate() { if 0 == index { sentencecaseString += String(character).uppercaseString } else { sentencecaseString.append(character) } } return sentencecaseString }


Una solución alternativa en Swift:

var str = "hello" if count(str) > 0 { str.splice(String(str.removeAtIndex(str.startIndex)).uppercaseString, atIndex: str.startIndex) }


Utilizar

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator

y capitalizar el primer objeto en la matriz y luego usar

- (NSString *)componentsJoinedByString:(NSString *)separator

para unirlos de nuevo


puedes usar la expresión regular que he hecho para mi es simple, puedes pegar debajo del código + (NSString *) CaptializeFirstCharacterOfSentence: (NSString *) sentence {

NSMutableString *firstCharacter = [sentence mutableCopy]; NSString *pattern = @"(^|//.|//?|//!)//s*(//p{Letter})"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL]; [regex enumerateMatchesInString:sentence options:0 range:NSMakeRange(0, [sentence length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { //NSLog(@"%@", result); NSRange r = [result rangeAtIndex:2]; [firstCharacter replaceCharactersInRange:r withString:[[sentence substringWithRange:r] uppercaseString]]; }]; NSLog(@"%@", firstCharacter); return firstCharacter;

} // Llamar a este método NsString * resultSentence = [UserClass CaptializeFirstCharacterOfSentence: yourTexthere];


pString = [pString stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[pString substringToIndex:1] capitalizedString]];