Comment insérer un espace dans un NSString.
J'ai besoin d'ajouter un espace à l'index 5 dans:
NString * dir = @"abcdefghijklmno";
Pour obtenir ce résultat:
abcde fghijklmno
avec:
NSLOG (@"%@", dir);
Vous devez utiliser NSMutableString
NSMutableString *mu = [NSMutableString stringWithString:dir];
[mu insertString:@" " atIndex:5];
ou vous pouvez utiliser ces méthodes pour diviser votre chaîne:
- substringFromIndex:
- substringWithRange:
- substringToIndex:
et les recombiner après avec
- stringByAppendingFormat:
- stringByAppendingString:
- stringByPaddingToLength: withString: StartingAtIndex:
Mais cette façon est plus de peine que ça vaut la peine. Et puisque NSString
est immuable, vous pariez beaucoup pour la création d’objets pour rien.
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!!!
Ce qui peut rendre difficile le débogage des problèmes .. C'est la raison pour laquelle @property
pour chaîne est généralement défini comme copy
alors si vous obtenez un NSMutableString
, en faisant une copie, vous êtes sûr que cela ne changera pas à cause d'un code inattendu .
J'ai tendance à préférer s = [NSString stringWithString:mu];
parce que vous ne comprenez pas mal la copie d'un objet mutable et le retour d'un objet immuable.
Et voici, par exemple, comment insérer un espace tous les 3 caractères ...
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);
résultat: 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);
Essayez ceci il vous aidera
Pour une tâche simple, vous avez besoin d'une solution simple:
NString * dir = @"abcdefghijklmno";
NSUInteger index = 5;
dir = [@[[dir substringToIndex:index],[dir substringFromIndex:index]]componentsJoinedByString:@" "];
Il existe une solution sans utiliser de chaîne mutable: remplacez les caractères dans une plage de longueur 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
Sur C++, j'ai trouvé plus facile de manipuler un std::string
et de le convertir en un NSString
. Par exemple.:
std::string text = "abcdefghijklmno";
text.insert(text.begin()+5, ' ');
NSString* result = [NSString stringWithUTF8String:text.c_str()];