0

私のforループは、私が求めていることをしていないようです。スペースと等しくない場合はカウントを実行しようとしていますが、スペースと等しい場合はオブジェクトを削除しようとしています。私の NSLOG は、まだスペースをカウントしており、それらを削除していないことを示しているため、どちらも機能していないようです。どんな助けでも大歓迎です。

NSMutableArray *a1 = [[NSMutableArray alloc] init];
// Take address and break into array by colon

if ([str rangeOfString:@"::"].location == NSNotFound)
{

    NSLog(@"Double Colon not found");
}
else 
{

    a1 = [[display.text componentsSeparatedByString:@":"]mutableCopy];
    //Separate string by colon
    NSLog(@"Separated string by colon: %@",a1);

    //count non blank segments
    for (item in a1) {
        if (item != @""){
            numofSeg = numofSeg + 1;

            needSeg = 8 - numofSeg;
            NSLog(@"%d",needSeg);
            }

    }



    while (needSeg > 0) {

        NSUInteger index = [a1 indexOfObject:@""];
        if (index != NSNotFound) {
            [a1 insertObject:@"0000" atIndex:index];
            needSeg = needSeg - 1;

        }
    }
    for (item in a1) {
        if (item == @"") {
            //remove blank spaces from list
            [a1 removeObject:item];
        }
    }
}

//Join objects back into a string separted by colon.
NSString *join = [a1 componentsJoinedByString:@":"];
NSLog(@"Join array into String: %@",join);

以下に出力します。アレイを再び結合すると、セグメントは 8 つになるはずですが、表示されるのは 6 つだけです。それは、二重コロンを区切ったときから 2 つのスペースを数えていることを示しています。

2012-10-01 19:50:52.430 IPv6[1287:c07] Separated string by colon: (
2002,
0000,
"",
""
)
2012-10-01 19:50:52.432 IPv6[1287:c07] 7
2012-10-01 19:50:52.433 IPv6[1287:c07] 6
2012-10-01 19:50:52.434 IPv6[1287:c07] 5
2012-10-01 19:50:52.435 IPv6[1287:c07] 4
2012-10-01 19:50:52.435 IPv6[1287:c07] Join array into String:       2002:0000:0000:0000:0000:0000::
4

2 に答える 2

0

反復処理中は可変配列を変更できません。ロジックを逆にして、保持したいオブジェクトを別の配列に集めることができます。

于 2012-10-02T01:15:50.427 に答える
0

まず、「!=」ではなく「-isEqualToString:」を使用して文字列を比較します。

第 2 に、'@""' と比較して何をしようとしているのかを判断するのは困難です。 :'? '@" "' を探しているということですか?

第 3 に、最初の行は、else 句が最初に行うことは「a1」に何か他のものを割り当てることであるという事実に照らして、無意味な割り当てです。

于 2012-10-02T01:17:58.570 に答える