0

我正在使用 Zxing 库来扫描条形码。结果存储在 NSString 中。在这里,我正在研究两种情况:

案例:'semicolon' :如果结果字符串包含分号字符......然后将其存储在分号数组中

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

案例:'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;
    }

在这种情况下....只有分号是 case 工作,即使我扫描管道案例,扫描仪也无法识别管道案例.. 有没有其他方法可以使用 && 或 || 逻辑在这里?

4

1 回答 1

1

您的代码的问题是两个集合都包含逗号,同时带有管道的字符串和带有分号的字符串都包含逗号。因此,只有两个 s 中最后一个的赋值才会if产生效果,因为两个ifs 都会“触发”。

您应该能够通过从集合中删除逗号和重复管道来解决此问题。此外,您应该能够通过使用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 回答