0

componentsSeparatedByString:奇妙な結果を出すことに問題があります。

このコードで:

CCLOG(@"    Found string %@",string);
tokens = [string componentsSeparatedByString:@"[,]"];

CCLOG(@"    sanity %@", (NSString *)[tokens objectAtIndex:0]);
int type = [(NSString *)[tokens objectAtIndex:0] integerValue];
int x = [(NSString *)[tokens objectAtIndex:1] integerValue]; //<< breakpoint

この出力ログを取得します。

2013-03-03 21:29:39.184 Legends[33427:c07]     Found string 1[0,5]
2013-03-03 21:29:39.185 Legends[33427:c07]     sanity 1[0,5]

したがって、配列トークンの最初のオブジェクトには文字列全体が含まれているため、プログラムが最後の行で中断することは理にかなっていますが、文字列をとに分割するべきではありません@"1[0,5]"か?@"1" @"0"@"5"

4

1 に答える 1

2

いいえ、その方法がどのように機能するかを誤解しています。componentsSeparatedByString:渡された文字列の個々の文字を使用するのではなく、文字列全体を使用します。セパレータは 3 文字のシーケンス[,]です。文字列 like@"pecan[,]pie"はこのセパレータを使用しますが、使用@"1[0,5]"しません。同様の方法componentsSeparatedByCharactersInSet:で、期待どおりの結果が得られます。

[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[,]"]];

文字列から数字を取り出して数値を取得したい場合は、 を参照してくださいNSScanner

于 2013-03-04T02:45:34.460 に答える