rostro opero operado nariz las kylie kendall kardashian jenner despues cual cirugías caderas antes objective-c ios5 nsstring

objective c - opero - Cómo insertar un personaje en un NSString



kylie jenner antes y despues (6)

En C ++ he encontrado más fácil manipular una std::string y luego convertirla en una NSString . P.ej:

std::string text = "abcdefghijklmno"; text.insert(text.begin()+5, '' ''); NSString* result = [NSString stringWithUTF8String:text.c_str()];

¿Cómo inserto un espacio en un NSString.

Necesito agregar un espacio en el índice 5 en:

NString * dir = @"abcdefghijklmno";

Para obtener este resultado:

abcde fghijklmno

con:

NSLOG (@"%@", dir);


Hay una solución sin usar una cadena mutable: reemplace los caracteres en un rango con longitud 0:

NSString * test = @"1234"; // Insert before "3", which is at index 2. NSRange range = NSMakeRange(2, 0); NSString * inserted = [test stringByReplacingCharactersInRange:range withString:@"abc"] NSLog(@"%@", inserted); // 12abc34


Necesitas usar NSMutableString

NSMutableString *mu = [NSMutableString stringWithString:dir]; [mu insertString:@" " atIndex:5];

o podrías usar ese método para dividir tu cadena:

- substringFromIndex:
- subcadena Con Rango:
- substringToIndex:

y volverlos a combinar después con

- stringByAppendingFormat:
- stringByAppendingString:
- stringByPaddingToLength: withString: startingAtIndex:

Pero de esa manera hay más problemas que vale la pena. Y como NSString es inmutable, apostaría mucho a la creación de objetos para nada.

NSString *s = @"abcdefghijklmnop"; NSMutableString *mu = [NSMutableString stringWithString:s]; [mu insertString:@" || " atIndex:5]; // This is one option s = [mu copy]; //[(id)s insertString:@"er" atIndex:7]; This will crash your app because s is not mutable // This is an other option s = [NSString stringWithString:mu]; // The Following code is not good s = mu; [mu replaceCharactersInRange:NSMakeRange(0, [mu length]) withString:@"Changed string!!!"]; NSLog(@" s == %@ : while mu == %@ ", s, mu); // ----> Not good because the output is the following line // s == Changed string!!! : while mu == Changed string!!!

Lo cual puede llevar a problemas difíciles de depurar. Esa es la razón por la cual @property para string generalmente se define como copy por lo que si obtiene un NSMutableString , al hacer una copia está seguro de que no cambiará debido a algún otro código inesperado.

s = [NSString stringWithString:mu]; a preferir s = [NSString stringWithString:mu]; porque no te da la confusión de copiar un objeto mutable y tener una copia inmutable.


Para una tarea simple, necesita una solución simple:

NString * dir = @"abcdefghijklmno"; NSUInteger index = 5; dir = [@[[dir substringToIndex:index],[dir substringFromIndex:index]]componentsJoinedByString:@" "];


Y aquí, por ejemplo, es cómo insertar un espacio cada 3 caracteres ...

NSMutableString *mutableString = [NSMutableString new]; [mutableString setString:@"abcdefghijklmnop"]; for (int p = 0; p < [mutableString length]; p++) { if (p%4 == 0) { [mutableString insertString:@" " atIndex:p]; } } NSLog(@"%@", mutableString);

resultado: abc def ghi jkl mno p


NSMutableString *liS=[[NSMutableString alloc]init]; for (int i=0; i < [dir length]; i++) { NSString *ichar = [NSString stringWithFormat:@"%c", [lStr characterAtIndex:i]]; [l1S appendString:ichar]; if (i==5) { [l1S appendString:@" "]; } } dir=l1S; NSLog(@"updated string is %@",dir);

Prueba esto, te ayudará