gpt4 book ai didi

cocoa - NSString 的 isEqualToString : seems to erroneously report non-equality

转载 作者:行者123 更新时间:2023-12-03 17:17:12 24 4
gpt4 key购买 nike

我正在尝试比较两个多行字符串的相等性。我从 Web 服务获取其中一个字符串,另一个通过脚本桥从 iTunes 获取。来自 Web 服务的字符串最终会传输到 iTunes,因此如果我这样做然后重新比较字符串,理想情况下它们会是相同的。

但是,当像这样比较字符串时,isEqualToString: 似乎总是返回不相等。我通过测试来自 iTunes 的最初来自 Web 服务的字符串与直接来自 Web 服务的字符串的相等性来对此进行测试。

将两个字符串记录到控制台会产生看起来相同的两个字符串的输出。记录字符串的长度会产生相同的长度。

我还尝试使用其他一些方法来比较字符串。例如,我将它们转换为 ASCII 字符串,以确保这不是 Unicode 问题:

        NSData *iTunesStringData = [[self iTunesString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSData *webServiceStringData = [[self webServiceString] dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];


NSString *newiTunesString = [[[NSString alloc] initWithData:iTunesStringData encoding:NSASCIIStringEncoding] autorelease];
NSString *newWebServiceString = [[[NSString alloc] initWithData:webServiceStringData encoding:NSASCIIStringEncoding] autorelease];

BOOL result = [newiTunesString isEqualToString:newWebServiceString];

同样的问题,不相等。我尝试只比较第一个字符:

        NSComparisonResult result = [newiTunesString compare:newWebServiceString
options:NSLiteralSearch
range:NSMakeRange(0,1)
locale:[NSLocale currentLocale]];

不返回 NSOrderedSame。我已将这些第一个字符记录到控制台,它们看起来相同。我还考虑了回车符的差异,并尝试在比较之前将两个字符串中的 @"\r"替换为 @"",但这不起作用(此外,这不应该影响第一个字符的相等性)。我不想删除 @"\n"字符,因为我想保留多行。

发生什么事了?还有其他想法吗?

最佳答案

事实证明这个问题与行结尾有关。但由于我正在比较多行字符串,因此我不想完全删除换行符。我像这样标准化了行结尾:

        NSString *normalizediTunesString = [[[self iTunesString] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@"\n"];
NSString *normalizedWebServiceString = [[[self webServiceString] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@"\n"];

然后,通过比较比较字符串:按预期工作。

关于cocoa - NSString 的 isEqualToString : seems to erroneously report non-equality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com