Как проверить строку с помощью логики AND или OR с помощью NSCharacterSet

Я использую библиотеку Zxing для сканирования штрих-кодов. Результат сохраняется в строке NSString. Здесь я рассматриваю два случая:

Case: 'точка с запятой': если строка результата содержит точку с запятой...., затем сохраните ее в массиве точек с запятой

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

Case: 'pipe': если строка результата содержит символ канала..., сохраните его в массиве pipe.

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

То, что я пытался сделать, это если строка результата содержит точку с запятой...... перейти к case: 'точка с запятой'...... если результат содержит pipe, перейти к case: 'pipe'. Я использовал это, чтобы сделать это, но не смог найти правильное решение.

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;
    }

Вот в этом случае.... работает только точка с запятой, хотя я сканирую случай канала, сканер не может распознать случай канала. Есть ли другой способ использовать && или || логика тут?

1 ответ

Решение

Проблема с вашим кодом состоит в том, что оба набора содержат запятые, и в то же время обе строки с трубами и строки с точками с запятой содержат запятые. Поэтому только присвоение из последнего из двух ifs будет иметь эффект, потому что оба ifс "огонь".

Вы должны быть в состоянии это исправить, удалив запятые и дубликаты труб из ваших наборов. Более того, вы сможете еще больше упростить его, используя 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;
}
Другие вопросы по тегам