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á