Как проверить строку с помощью логики 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 ответ
Проблема с вашим кодом состоит в том, что оба набора содержат запятые, и в то же время обе строки с трубами и строки с точками с запятой содержат запятые. Поэтому только присвоение из последнего из двух if
s будет иметь эффект, потому что оба 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;
}