Сравнение двух NSStrings
в моем приложении есть механизм, который требует, чтобы в определенный момент два NSString
s будет то же самое, чтобы что-то сделать; по какой-то причине, когда я сравниваю их, даже когда они одинаковы, он все еще не признает этого. Код примерно такой:
NSString * aString = [self someMethodThatGetsAString];
NSString * bString;
BOOL areStringsTheSame = NO;
while (areStringsTheSame != YES) {
bString = [self someMethodThatTakesNSStringsFromAnArrey];
if (bString == aString) {
areStringsTheSame = YES;
{ }
Я даже вставил NSLog()
и убедился, что в определенный момент они были одинаковыми (и, насколько я знаю, это то, что ==
стенды для...), но все же он не попал в if
изменить BOOL
значение.
есть ли другой способ сделать это сравнение? Я что-то упускаю?
3 ответов
вы можете использовать метод isEqualToString::
if ([bString isEqualToString:aString])
==
сравнивает ссылки (адреса) строк, а не значение строк.
этот подход сработал для меня:
if ([firstString compare:secondString] == NSOrderedSame) {
//Do something when they are the same
} else {
//Do something when they are different
}
недавно я был потрясен тем фактом, что две NSStrings, которые похожи друг на друга в NSLog, могут быть разными. Это потому, что иногда NSString может содержать символ пробела нулевой ширины. Осознайте это и подумайте:
#define ZERO_WIDTH_SPACE_STRING @"\u200B"
чтобы победить это, вы должны очистить строку от символов пробела нулевой ширины перед сравнением:
NSMutableString *eMailToAdd = [NSMutableString string];
NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy];
//[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
NSString *rawStr = [[tokenField textField] text];
for (int i = 0; i < [rawStr length]; i++)
{
if (![charSet characterIsMember:[rawStr characterAtIndex:i]])
{
[eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]];
}
}