0

文字列をコンポーネントの配列に番号で分割しようとしましたが、その方法がわかりません。最後のコンポーネントを除いて、各コンポーネントの長さが 9 であることはわかっています。しかし、それらの間に分離はありません。この分割を可能にする方法を誰かが知っているでしょうか?

文字列: E44000000R33000444V33441 そして、配列を取得したい: E44000000 R33000444 V33441

過去にこの方法を使用しましたが、定数で区切る方法があるはずです。何か案は

NSArray *myWords = [message componentsSeparatedByString:@";"];
4

5 に答える 5

2

以下のコードを試してください。

NSString *stringTest = @"E44000000R33000444V33441323";
NSMutableArray *arrayTest = [NSMutableArray array];
while([stringTest length] > 8) {
    [arrayTest addObject:[NSString stringWithString:[stringTest substringToIndex:9]]];
    stringTest = [stringTest substringFromIndex:9];
}
NSLog(@"arrayTest - %@", arrayTest);
于 2012-12-13T06:58:15.193 に答える
2

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

NSString *mainString=@"E44000000R33000444V";
NSMutableArray *brokenString=[NSMutableArray new];

int start=0;
for (; start<mainString.length-9; start+=9) {
     [brokenString addObject:[mainString substringWithRange:NSMakeRange(start, 9)]];
}
[brokenString addObject:[mainString substringFromIndex:start]];
NSLog(@"->%@",brokenString);

出力は次のとおりです。

->(
    E44000000,
    R33000444,
    V
)
于 2012-12-13T07:38:27.483 に答える
1

NSString を調べましたが、そのような関数は見つかりませんでした。ただし、NSString のカテゴリを作成し、この関数をそのカテゴリに配置して、NSString インスタンス メソッドとして使用することができます。

- (NSArray *) componentSaparetedByLength:(NSUInteger) length{
        NSMutableArray *array = [NSMutableArray new];
        NSRange range = NSMakeRange(0, length);
        NSString *subString = nil;
        while (range.location + range.length <= self.length) {
            subString = [self substringWithRange:range];
            [array addObject:subString];
            //Edit
            range.location = range.length + range.location;
            //Edit
            range.length = length;
        }

        if(range.location<self.length){
            subString = [self substringFromIndex:range.location];
            [array addObject:subString];
        }
        return array;
}
于 2012-12-13T07:12:42.370 に答える
0

また、ここでの要件ではありません。代理ペア、基本文字と結合マークハングルジャモインドの子音クラスターなど、より高度なスクリプトシステムの文字を処理できるソリューションを提案したいと思います。

@interface NSString (Split)
-(NSArray *)arrayBySplittingWithMaximumSize:(NSUInteger)size
                                     options:(NSStringEnumerationOptions) option;
@end

@implementation NSString (Split)

-(NSArray *)arrayBySplittingWithMaximumSize:(NSUInteger)size
                                     options:(NSStringEnumerationOptions) option
{
    NSMutableArray *letterArray = [NSMutableArray array];
    [self enumerateSubstringsInRange:NSMakeRange(0, [self length])
                                options:(option)
                             usingBlock:^(NSString *substring,
                                          NSRange substringRange,
                                          NSRange enclosingRange,
                                          BOOL *stop) {
                                 [letterArray addObject:substring];
                             }];


    NSMutableArray *array = [NSMutableArray array];
    [letterArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if (idx%size == 0) {
            [array addObject: [NSMutableString stringWithCapacity:size]];
        }
        NSMutableString *string = [array objectAtIndex:[array count]-1];
        [string appendString:obj];

    }];

    return array;
}

@end

利用方法

NSArray *array = [@"E44000000R33000444V33441" arraysBySplittingWithMaximumSize:9 
                                                                       options:NSStringEnumerationByComposedCharacterSequences];

結果:

(
    E44000000,
    R33000444,
    V33441
)
于 2012-12-13T19:30:25.617 に答える
0

ループ内で必要な文字 (文字列の長さ) までの部分文字列を取得し、次の部分文字列を取得するために次のインデックスを渡すことができます。各部分文字列を取得したら、それを配列に追加できます。SubstringToIndex&SubstringFromIndex関数を使用して部分文字列を取得しました。

于 2012-12-13T07:01:46.707 に答える