webentwicklung-frage-antwort-db.com.de

Einfügen eines Zeichens in einen NSString

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);
32
JohnPortella

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.

85
Vincent Bernier

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

4
Muruganandham K
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

2
KAREEM MAHAMMED

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:@" "];
1
turingtested

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
0
DarkDust

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()];
0
dacap