0

Zxing ライブラリを使用してバーコードをスキャンしています。結果は NSString に格納されます。ここでは、次の 2 つのケースを検討しています。

Case:'semicolon' : 結果の文字列にセミコロン文字が含まれている場合....それをセミコロン配列に格納します

myWords_semicolon = [_myString componentsSeparatedByCharactersInSet:
                            [NSCharacterSet characterSetWithCharactersInString:@";,;;"]
                            ];
       //here myWords_semicolon is a NSArray

Case: 'pipe' : 結果の文字列にパイプ文字が含まれている場合は、パイプ配列に格納します。

myWords_pipe = [_myString componentsSeparatedByCharactersInSet:
                    [NSCharacterSet characterSetWithCharactersInString:@"|,||"]
           ];

私がやろうとしたのは、結果の文字列にセミコロンが含まれている場合......ケースに移動:'セミコロン' ...結果にパイプが含まれている場合:ケースに移動:'パイプ'. これを使用してそれを行いましたが、適切な解決策を得ることができませんでした。

if ([_myString rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@";,;;"]].location != NSNotFound) {
        NSLog(@"This string doesnt contain semicolon characters");
        myWords=myWords_pipe;

    }

    if ([_myString rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"|,||"]].location != NSNotFound) {
        NSLog(@"This string doesnt contain pipe characters");


        myWords=myWords_semicolon;
    }

この場合....セミコロンのみが大文字と小文字を区別して動作しますが、パイプの大文字と小文字をスキャンしても、スキャナーはパイプの大文字と小文字を認識できません.. && または || を使用する他の方法はありますか? ここでロジック?

4

1 に答える 1

1

コードの問題は、両方のセットにコンマが含まれていると同時に、パイプを含む文字列とセミコロンを含む文字列の両方にコンマが含まれていることです。ifしたがって、両方ifの s が「起動」するため、2 つの s の最後の s からの割り当てのみが有効になります。

セットからカンマと重複したパイプを削除することで、これを修正できるはずです。rangeOfString:さらに、代わりにメソッドを使用することで、さらに単純化できるはずですrangeOfCharacterFromSet:

if ([_myString rangeOfString:@";"].location != NSNotFound) {
    NSLog(@"This string contains a semicolon");
    myWords=myWords_semicolon;
}
if ([_myString rangeOfString:@"|"].location != NSNotFound) {
    NSLog(@"This string contains a pipe");
    myWords=myWords_pipe;
}
于 2014-09-26T03:03:19.023 に答える