Wie füge ich ein Leerzeichen in einen NSS-String ein?.
Ich muss an Index 5 ein Leerzeichen einfügen:
NString * dir = @"abcdefghijklmno";
Um dieses Ergebnis zu erhalten:
abcde fghijklmno
mit:
NSLOG (@"%@", dir);
Sie müssen NSMutableString
verwenden.
NSMutableString *mu = [NSMutableString stringWithString:dir];
[mu insertString:@" " atIndex:5];
oder Sie können diese Methode verwenden, um Ihre Zeichenfolge zu teilen:
- substringFromIndex:
- substringWithRange:
- substringToIndex:
und rekombinieren sie danach mit
- stringByAppendingFormat:
- stringByAppendingString:
- stringByPaddingToLength: withString: startingAtIndex:
Aber dies ist mehr Mühe, die es wert ist. Und da NSString
unveränderlich ist, würden Sie viel Objekterstellung umsonst einsetzen.
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!!!
Dies kann zu schwer zu debuggenden Problemen führen. Dies ist der Grund, warum @property
für Zeichenfolge normalerweise als copy
definiert wird. Wenn Sie also eine NSMutableString
erhalten, sind Sie sich sicher, dass sie sich bei der Erstellung einer Kopie nicht aufgrund eines anderen unerwarteten Codes ändert .
Ich neige dazu, s = [NSString stringWithString:mu];
zu bevorzugen, weil Sie nicht die Verwirrung bekommen, ein veränderliches Objekt zu kopieren und ein unveränderliches Objekt zu haben.
Und hier zum Beispiel, wie alle drei Zeichen ein Leerzeichen eingefügt wird ...
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);
ergebnis: 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);
Versuchen Sie dies, es wird Ihnen helfen
Für eine einfache Aufgabe benötigen Sie eine einfache Lösung:
NString * dir = @"abcdefghijklmno";
NSUInteger index = 5;
dir = [@[[dir substringToIndex:index],[dir substringFromIndex:index]]componentsJoinedByString:@" "];
Es gibt eine Lösung ohne eine veränderliche Zeichenfolge: Ersetzen Sie die Zeichen in einem Bereich mit der Länge 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
In C++ habe ich es einfacher gefunden, einen std::string
zu bearbeiten und dann in eine NSString
umzuwandeln. Z.B.:
std::string text = "abcdefghijklmno";
text.insert(text.begin()+5, ' ');
NSString* result = [NSString stringWithUTF8String:text.c_str()];