web-dev-qa-db-ja.com

NSStringに文字を挿入する方法

NSStringにスペースを挿入するにはどうすればよいですか。

インデックス5にスペースを追加する必要があります。

NString * dir = @"abcdefghijklmno";

この結果を取得するには:

abcde fghijklmno

で:

NSLOG (@"%@", dir);
33
JohnPortella

NSMutableStringを使用する必要があります

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

または、これらのメソッドを使用して文字列を分割できます:

– substringFromIndex:
– substringWithRange:
– substringToIndex:

後にそれらを再結合します

– stringByAppendingFormat:
– stringByAppendingString:
– stringByPaddingToLength:withString:startingAtIndex:

しかし、その方法はそれだけの価値があるより多くのトラブルです。 NSStringは不変であるため、多くのオブジェクトを何も作成せずに作成できます。


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!!! 

デバッグが困難な問題につながる可能性があります。これが、文字列の@propertyが通常copyとして定義される理由です。したがって、NSMutableStringを取得した場合、コピーを作成することで、他の予期しないコードによって変更されないことが確実です。

s = [NSString stringWithString:mu];を好む傾向があるのは、可変オブジェクトをコピーして不変オブジェクトを戻すという混乱が生じないからです。

87
Vincent Bernier

そして、ここでは、たとえば、3文字ごとにスペースを挿入する方法です...

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

結果: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);

これを試してみてください

2
KAREEM MAHAMMED

単純なタスクには、単純なソリューションが必要です。

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

可変文字列を使用せずに解決策があります。範囲内の文字を長さ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

C++では、std::stringそして、それをNSStringに変換します。例えば。:

std::string text = "abcdefghijklmno";
text.insert(text.begin()+5, ' ');

NSString* result = [NSString stringWithUTF8String:text.c_str()];
0
dacap