13

何時間も検索しましたが、問題の解決策が見つかりません。次のような NSString があります。

"スペーサー": ["値1", "値2"], "スペーサー": ["値1", "値2"], ...

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

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

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

4

2 に答える 2

24

文字列内の文字列の出現箇所を見つけるには、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);

String Programming Guideに詳細があります。
または、NSScanner クラスを使用することもできます。

于 2010-03-04T15:02:49.353 に答える
4

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

NSString *original = @"\"spacer\": \[\"value1\", \"value2\"], \"spacer\": \[\"value1\", \"value2\"]";
NSRange range = [original rangeOfString:@"\["];
NSString *toBracket = [NSString stringWithString :[original substringToIndex:range.location] ];
NSLog(@"toBracket: %@", toBracket);
于 2010-08-19T20:33:09.543 に答える