NSString
固定長部分を持つ配列に分割したい。これどうやってするの?
私はそれについて検索しましたが、 componentSeparatedByString メソッドしか見つかりませんでした。手動で行うこともできますが、これを行うより速い方法はありますか?
NSString
固定長部分を持つ配列に分割したい。これどうやってするの?
私はそれについて検索しましたが、 componentSeparatedByString メソッドしか見つかりませんでした。手動で行うこともできますが、これを行うより速い方法はありますか?
「より速い」とは何を意味するかによって異なります-それがプロセッサのパフォーマンスである場合、それを打ち負かすのは難しいと思いますがsubstringWithRange:
、このような問題を堅牢で簡単にコーディングするには、正規表現が実際に非常に役立ちます。
以下は、文字列を 10 文字のチャンクに分割するために使用できるもので、最後のチャンクを 10 文字未満にすることができます。
NSString *pattern = @".{1,10}";
残念ながら、正規表現機構の Cocoa 実装は洗練されていませんが、使用するのに十分単純です。
NSString *string = @"I want to split NSString into array with fixed-length parts. How can i do this?";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options: 0 error: &error];
NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
NSMutableArray *result = [NSMutableArray array];
for (NSTextCheckingResult *match in matches) {
[result addObject: [string substringWithRange: match.range]];
}
文字列を一連の NSRanges に分割してから、NSString のsubstringWithRange:
メソッドを使用してみてください。
文字列はさまざまな方法で分割できます。1 つの方法は、スペース (または任意の文字) で分割することです。
NSString *string = @"Hello World Obj C is Awesome";
NSArray *words = [string componentsSeparatedByString:@" "];
文字列内の正確な位置で分割することもできます:
NSString *word = [string substringWithRange:NSMakeRange(startPoint, FIXED_LENGTH)];
固定長のループに入れて、可変配列に保存するだけです。
NSMutableArray *words = [NSMutableArray array];
for (int i = 0; i < [string length]; i++) {
NSString *word = [string substringWithRange:NSMakeRange(i, FIXED_LENGTH)]; //you may want to make #define
[array addObject:word];
}
お役に立てれば。