Я пытаюсь выполнить сравнение строк в двух строках, хранящихся в двух разных массивах. 90% времени он работает, но в других 10% случаев это не так. В этом случае я сравниваю названия городов.isEqualToString не сравнивается правильно
Ниже мой код:
//setup of string comparison
NSString* string1 = [information from array 1];
NSString *string2 = [information from array 2];
//remove whitespace.
NSArray* string1sep = [string1 componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceCharacterSet]];
NSString* string1rw = [string1sep componentsJoinedByString:@""];
string1rw = [string1rw lowercaseString];
NSArray* string2sep = [string2 componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceCharacterSet]];
NSString* string2rw = [string2sep componentsJoinedByString:@""];
string2rw = [string2rw lowercaseString];
//compare strings
NSLog(@"%@ (%u): %@ (%u)", string1rw, [string1rw length], string2rw, [string2rw length]);
if([string1rw isEqualToString:string2rw]){
NSLog(@"Success");
}
мой код обернут в цикле, который проверяет каждый элемент массива. результат выглядит так
-----------------------
Identifier 1
whangarei (9): whangarei (9)
whangarei (9): kaitaia (7)
whangarei (9): kerikeri (8)
whangarei (9): paruabay (8)
whangarei (9): kamo (4)
whangarei (9): tutukaka (8)
whangarei (9): auckland (8)
whangarei (9): kaiparacoast (12)
whangarei (9): paihia (6)
whangarei (9): hikurangi (9)
whangarei (9): hokianga (8)
whangarei (9): tba (3)
failure
-----------------------
Identifier 2
kaiparacoast (12): whangarei (9)
kaiparacoast (12): kaitaia (7)
kaiparacoast (12): kerikeri (8)
kaiparacoast (12): paruabay (8)
kaiparacoast (12): kamo (4)
kaiparacoast (12): tutukaka (8)
kaiparacoast (12): auckland (8)
kaiparacoast (12): kaiparacoast (12)
Success
Струны и такой же длины, как пишется то же самое, как де-капитализированы, оба имеют белое пространство удалены. почему это работает с одной строкой, но не с другой?
Для народов ссылки это мой оригинальный неочищенные код (немного сложнее читать)
- (BOOL) addToFilteredResults: (int) ofset{
int catCount = 0;
int citCount = 0;
NSLog(@"-----------------------");
NSLog(@"%@", [[CHARTeventsFull objectAtIndex:ofset]objectForKey:@"event"]);
for(NSString *cityCheck in eventCities){
if([[citySelected objectAtIndex:citCount] isEqual:[NSNumber numberWithBool:YES]]){
//setup of string comparison
NSArray* cityChecksep = [cityCheck componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceCharacterSet]];
NSString* cityCheckrw = [cityChecksep componentsJoinedByString:@""];
cityCheckrw = [cityCheckrw lowercaseString];
NSString *city = [[CHARTeventsFull objectAtIndex:ofset]objectForKey:@"town"];
NSArray* citysep = [city componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceCharacterSet]];
NSString* cityrw = [citysep componentsJoinedByString:@""];
cityrw = [cityrw lowercaseString];
//comparison
NSLog(@"%@ (%u): %@ (%u)", cityrw, [cityrw length], cityCheckrw, [cityCheckrw length]);
if([cityCheckrw isEqualToString:cityrw]){
//doing another comparison here this code can be ignored for this question
//----------------------------
for(NSString *categoryCheck in eventCatagories){
if([[catagorySelected objectAtIndex:catCount] isEqual:[NSNumber numberWithBool:YES]]){
NSArray *categoriesFromEvent = [[CHARTeventsFull objectAtIndex:ofset]objectForKey:@"categories"];
for (NSString *category in categoriesFromEvent) {
NSLog(@"%@ : %@", category, categoryCheck);
if([categoryCheck isEqualToString:category]){
NSLog(@"Success");
return YES;
}
}
}
catCount++;
}
//---------------------------
}
}
citCount++;
}
NSLog(@"failure");
return NO;
}
Я не знаю, если это опечатка или ошибка копирования/вставки o r, но ваша первая строка 'NSLog()' повторяет использование «sting» (no 'r') вместо «string». Как показано, вы регистрируете что-то другое, чем вы сравниваете. –
: P заменил все имена более легкими для чтения именами и очистил код всех не существенных вещей к этому вопросу. должно быть, пропустили письмо при этом. журнал правильный в моей программе. плохое исправление, которое теперь отображается в показанном коде. –
также внесет поправки с моим оригинальным неочищенным кодом, а также –