isEqualToString:没有正确比较字符串

问题描述:

我有两个完全相同的字符串,但它们没有被比较为相等。一个字符串是可变字符串,另一个是普通字符串,并且我有一个if语句来检查两个字符串是否相等。两个字符串的输出是这样的:isEqualToString:没有正确比较字符串

2013-04-08 09:09:31.555 Pin2Own[650:1303] 6447 E Crocus Dr 
2013-04-08 09:09:31.555 Pin2Own[650:1303] 6447 E Crocus Dr 

顶部是一个可变字符串,底部是普通字符串。我试图将可变字符串转换为普通字符串,但我遇到同样的问题。我从一个NSXMLParser子类中的xml文档中获取可变字符串,另一个从单例中的可变数组中获取可变字符串。下面是的NSXMLParser类的代码:

- (void)parserDidStartDocument:(NSXMLParser *)parser 
{ 
    address = nil; 
    zpid = nil; 
} 

- (void)parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"street"]) 
    address = [[NSMutableString alloc] init]; 

    if ([elementName isEqualToString:@"zpid"]) 
    zpid = [[NSMutableString alloc] init]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if(address) 
    [address setString:string]; 

    else if(zpid) 
    [zpid setString:string]; 
} 

- (void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"street"]) 
    NSLog(@"%@", address); 

    if ([elementName isEqualToString:@"zpid"]) 
    NSLog(@"zip id is: %@", zpid); 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{  
    NSMutableArray *annotations = [[Data singleton] annotations]; 

    for (MapPoint *mp in annotations) 
    { 
     NSLog(@"%@", mp.fullAddress); 
     if ([mp.fullAddress isEqualToString:address]) 
     { 
      mp.zpid = zpid; 
     } 
     else 
     { 
      NSLog(@"Did not match address"); 
     } 
    } 
} 

,所以我比较这两个地址,并设置属性,如果地址是相同的,这我已经确定将永远是正确的。有没有人看到是否有什么问题?我真的不知道为什么会发生这种情况。

+1

你检查过两个字符串的长度看看他们是否一样?可能有空白或其他不可打印的字符。 – rdelmar 2013-04-08 16:21:30

+1

如果从某处复制并粘贴,可能会有一些隐藏字符 – Tim 2013-04-08 16:22:49

+0

好的我发现可变字符串是49个字符,普通字符串是16个字符。有没有办法让可变字符串16个字符? – 2013-04-08 16:25:09

尝试在比较字符串之前对字符串中的空格字符进行修剪。您可以使用以下

firstString = [firstString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
secondString = [secondString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
BOOL stringsAreEqual = [firstString isEqualToString:secondString]; 

不要责怪信任isEqualToString:方法。

您必须在任何地址字符串的开头或结尾添加一些空格。

使用stringByTrimmingCharactersInSet:删除前导和尾随空格。

清洁串是一门艺术而不是科学多,但在空白的情况下,这是可以做到相当好:

// Various types of whitespace in the input string 
NSString *dirtyStr = @" \tJoe\t Doe \n 42, Main St. \n\rMetropolis 12345 "; 

// First trim the initial and final white space characters away 
NSString *trimmed = [dirtyStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

NSLog(@"Trimmed: \"%@\"", trimmed); 

// Then remove repeated space characters in the middle (if consistent with your requirements) 
NSString *cleaned = [trimmed stringByReplacingOccurrencesOfString:@"\\s+" withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, trimmed.length)]; 

NSLog(@"Cleaned: \"%@\"", cleaned);