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");
}
}
}
,所以我比较这两个地址,并设置属性,如果地址是相同的,这我已经确定将永远是正确的。有没有人看到是否有什么问题?我真的不知道为什么会发生这种情况。
答
尝试在比较字符串之前对字符串中的空格字符进行修剪。您可以使用以下
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);
你检查过两个字符串的长度看看他们是否一样?可能有空白或其他不可打印的字符。 – rdelmar 2013-04-08 16:21:30
如果从某处复制并粘贴,可能会有一些隐藏字符 – Tim 2013-04-08 16:22:49
好的我发现可变字符串是49个字符,普通字符串是16个字符。有没有办法让可变字符串16个字符? – 2013-04-08 16:25:09