Estoy tratando de reemplazar todos los caracteres excepto los últimos 4 en una cadena con *.
En objetivo-c hay un método en NSString clase replaceStringWithCharactersInRange: withString:
donde le daría rango (0,[string length]-4)
) con la cadena @"*"
. Esto es lo que hace: 123456789ABCD se modifica a * ABCD mientras estoy buscando hacer ******** ABCD. Entiendo que reemplazó el rango que especifiqué con el objeto de cadena. ¿Cómo lograr esto?Reemplazar caracteres en NSString
Respuesta
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
Puede usar [theString substringToIndex:[theString length]-4]
para obtener la primera parte de la cadena y luego combinar [la longitud del String] -4 * con la segunda parte. Tal vez su es una manera más fácil de hacer esto ..
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
[str1 replaceCharactersInRange:NSMakeRange(0, [str1 length] - 4) withString:@"*"];
NSLog(@"%@",str1);
funciona
¿Leíste mi pregunta o la respuesta de mi pregunta?downvoted por mí – ARC
Lo siento, no entiendo la pregunta correctamente – Vitaliy
NSMutableString * str1 = [[NSMutableString alloc] initWithString: @ "1234567890ABCD"]; NSRange replacementRange = NSMakeRange (0, [str1 length] - 4); NSMutableString * replacementString = [[NSMutableString alloc] init]; para (uint i = 0; i
Esto parece un problema sencillo ... obtener la primera secuencia parcial y devolverlo con los cuatro últimos caracteres adjuntas lo.
Aquí es una función que devuelve la cadena necesaria:
-(NSString *)neededStringWithString:(NSString *)aString {
// if the string has less than or 4 characters, return nil
if([aString length] <= 4) {
return nil;
}
NSUInteger countOfCharToReplace = [aString length] - 4;
NSString *firstPart = @"*";
while(--countOfCharToReplace) {
firstPart = [firstPart stringByAppendingString:@"*"];
}
// range for the last four
NSRange lastFourRange = NSMakeRange([aString length] - 4, 4);
// return the combined string
return [firstPart stringByAppendingString:
[aString substringWithRange:lastFourRange]];
}
La parte más intuitivo en el cacao es la creación de las estrellas que se repiten sin algún tipo de bucle incómoda. stringByPaddingToLength:withString:startingAtIndex:
le permite crear una cadena de repetición de cualquier longitud que desee, por lo que una vez que tenga que, he aquí una solución sencilla:
NSInteger starUpTo = [string length] - 4;
if (starUpTo > 0) {
NSString *stars = [@"" stringByPaddingToLength:starUpTo withString:@"*" startingAtIndex:0];
return [string stringByReplacingCharactersInRange:NSMakeRange(0, starUpTo) withString:stars];
} else {
return string;
}
La expresión regular no funcionaba en iOS7, pero tal vez esto ayuda:
- (NSString *)encryptString:(NSString *)pass {
NSMutableString *secret = [NSMutableString new];
for (int i=0; i<[pass length]; i++) {
[secret appendString:@"*"];
}
return secret;
}
En su caso, debe dejar de reemplazar los últimos 4 caracteres. Poco crudo, pero hace el trabajo
Todo esto devuelve una cadena que está * 'd out. ¿Cómo responde esto la pregunta? (¿Saliendo de los últimos 4?) –
De hecho, Hmm no leyó lo suficiente. for (int i = 0; i <[longitud de paso] - 4; i ++) { [secret appendString: @ "*"]; } luego use nsmakerange para copiar los últimos 4 caracteres. Pero una mejor respuesta ya está ahí – CocoaChris
No estoy seguro de por qué se aceptó la respuesta aceptada, ya que solo funciona si todo menos el último 4 es un dígito. Aquí está una manera simple:
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
NSRange r = NSMakeRange(0, [str1 length] - 4);
[str1 replaceCharactersInRange:r withString:[[NSString string] stringByPaddingToLength:r.length withString:@"*" startingAtIndex:0]];
NSLog(@"%@",str1);
- 1. Reemplazar ocurrencias de NSString - iPhone
- 2. Reemplazar un char en NSString
- 3. NSString Length - Caracteres especiales
- 4. Objetivo C: ¿Reemplazar parte de la cadena en NSString?
- 5. Detectar caracteres Unicode en NSString en iPhone
- 6. eliminar caracteres específicos de NSString
- 7. NSString relleno/espacio entre caracteres
- 8. Reemplazar caracteres en un archivo
- 9. Reemplazar ciertos caracteres en javascript
- 10. Quitar los caracteres en NSCharacterSet de NSString
- 11. ¿Número de caracteres en NSString o NSMutableString?
- 12. Convertir NSString en matriz de caracteres
- 13. Transliterar/transponer los caracteres en el NSString
- 14. Caracteres especiales en NSString de HTML
- 15. reemplazar caracteres especiales
- 16. Javascript a reemplazar caracteres
- 17. cómo quitar caracteres de NSString después NSString específica
- 18. Reemplazar caracteres no numéricos
- 19. reemplazar caracteres especiales en cadena en java
- 20. Reemplazar un carácter en un índice determinado en NSString
- 21. Enumerar caracteres NSString mediante el puntero
- 22. cadena reemplazar caracteres de escape
- 23. Python String.Replace() no reemplazar caracteres
- 24. Javascript: Reemplazar caracteres después de _
- 25. Reemplazar caracteres si no coincide
- 26. ¿Puede MySQL reemplazar múltiples caracteres?
- 27. Cómo reemplazar caracteres en una cadena java?
- 28. Reemplazar caracteres en la propiedad Ant
- 29. reemplazar caracteres que no trabajan en pitón
- 30. Cómo reemplazar caracteres especiales en una cadena?
no funciona, la cadena es reemplazado por – ARC
* Trate '@ "\ d +"' 'como su regularExpressionWithPattern:' argumento. Intenté '\\ d +' en [este probador de expresiones regulares] (http://regexpal.com/), y falló, pero '\ d +' funcionó. –
Solucionado. Simplemente reemplace \\ d + con \\ d en el patrón. Solo recuerde que las expresiones regulares requieren iOS 4 o posterior. Si necesita que funcione en iOS 3, debería usar NSScanner – Lefteris