web-dev-qa-db-ja.com

NSStringまたはNSMutableString内の文字の位置

私は今何時間も検索しましたが、私の問題の解決策を見つけられませんでした。次のようなNSStringがあります。

"spacer":["value1"、 "value2"]、 "spacer":["value1"、 "value2"]、...

私がやりたいのは、文字列から[]文字を削除することです。 Objective-cでは不可能のようです。他のほとんどのプログラミング言語は、strposやindexOfなどの関数を提供しており、文字や文字列を検索してその位置を見つけることができます。しかし、Objective-cにはこのようなものはないようです。

誰かがこれらの文字を削除する方法についてのアイデアを持っていますか?さらに、文字列には[]文字が残っているため、NSMutableString stringByReplacingOccurencesOfString:withStringを使用することはできません。最初にスペーサー文字列を検索してから、次の2つの[]文字のみを削除する必要があります。

助けてくれてありがとう。

12
Dominik

文字列内の文字列の出現を見つけるには、 NSString クラスのrangeOfXXXメソッドを使用します。次に、NSRangesを作成して、部分文字列などを抽出できます。

この例では、サンプル文字列の最初の開閉ブラケットのセットのみを削除します。

NSString *original = @"\"spacer\": \[\"value1\", \"value2\"], \"spacer\": \[\"value1\", \"value2\"]";
NSLog(@"%@", original);

NSRange startRange = [original rangeOfString:@"\["];
NSRange endRange = [original rangeOfString:@"]"];

NSRange searchRange = NSMakeRange(0, endRange.location);
NSString *noBrackets = [original stringByReplacingOccurrencesOfString:@"\[" withString:@"" options:0 range:searchRange];
noBrackets = [noBrackets stringByReplacingOccurrencesOfString:@"]" withString:@"" options:0 range:searchRange];
NSLog(@"{%@}", noBrackets);

文字列プログラミングガイド 詳細があります。
あるいは、NSScannerクラスを使用できる場合もあります。

23
user121301

これは、文字のインデックスにすべてを抽出するために機能しました。この場合は '[':

NSString *original = @"\"spacer\": \[\"value1\", \"value2\"], \"spacer\": \[\"value1\", \"value2\"]";
NSRange range = [original rangeOfString:@"\["];
NSString *toBracket = [NSString stringWithString :[original substringToIndex:range.location] ];
NSLog(@"toBracket: %@", toBracket);
4
PostCodeism