Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSString isEqualToString:用于\n_Objective C_Cocoa_Nsstring_String Comparison - Fatal编程技术网

Objective c NSString isEqualToString:用于\n

Objective c NSString isEqualToString:用于\n,objective-c,cocoa,nsstring,string-comparison,Objective C,Cocoa,Nsstring,String Comparison,我有一个调用web服务的Cocoa应用程序。当解析来自web服务的响应时,对于XML中的每个元素,NSXMLParser的foundCharacters委托中的最后一个字符是\n 当我尝试执行以下操作时: if (![string isEqualToString:@"\n"]) if (![string isEqualToString:@"\n"]) 支票总是赶不上换行。有人知道用字符串检查换行符的好方法吗 我还发现奇怪的是,每个元素在每个值的末尾都有一个换行符,尽管我在web服务的输出中没

我有一个调用web服务的Cocoa应用程序。当解析来自web服务的响应时,对于XML中的每个元素,NSXMLParser的foundCharacters委托中的最后一个字符是\n

当我尝试执行以下操作时:

if (![string isEqualToString:@"\n"])
if (![string isEqualToString:@"\n"])
支票总是赶不上换行。有人知道用字符串检查换行符的好方法吗

我还发现奇怪的是,每个元素在每个值的末尾都有一个换行符,尽管我在web服务的输出中没有看到这方面的证据


这是一个非常简单的问题。

我想这正是你需要的吗?
text=[text-stringByTrimmingCharactersInSet:[NSCharacterSet-whitespaceAndNewlineCharacterSet]]

当我解析来自web服务的响应时,我得到一个\n作为最后一个字符

当我尝试执行以下操作时:

if (![string isEqualToString:@"\n"])
if (![string isEqualToString:@"\n"])
支票总是赶不上换行

如果
string
为一个字符长且该字符为
\n
,则该消息将仅返回
YES

如果要测试字符串是否以
\n
结尾,则需要使用
hasSuffix:

if (![string hasSuffix:@"\n"])
如果要从字符串的末尾剥离
\n
,并使用剩余的内容,则phunehehe的解决方案是正确的


编辑:在Jeremy W.Sherman的回答中,他指出web服务可能会提供以CRLF结尾的文本。这是一个有效点,您不仅应该在行尾查找
\n
,还应该检查完整的
\r\n
序列。他提出的代码是实现这一点的一种方法。无论如何,您仍然需要删除整行分隔符,即使它是
\r\n
序列。

web服务可能会使用
CRLF
终止所有行,即
“\r\n”
。您在UNIX系统上,因此换行符
'\n'
被用作行分隔符;回车符
'\r'
作为前一行的一部分保留。打印时,其效果与
'\n'
相同。您是否已验证(使用,例如,
strvis
)行的最后一个字符是
'\n'
,而不是
'\r'

-[NSString hasSuffix:
将只捕获您提供的特定换行符。要测试字符串是否以换行符或空格结尾,这里有一个假定的category方法:

- (BOOL)my_hasWhitespaceOrNewlineSuffix {
  NSRange r = [self rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
                                    options:NSBackwardsSearch];
  BOOL foundChar = r.location != NSNotFound;
  BOOL isLineFinal = foundChar && (r.location + r.length == [self length]);
  return isLineFinal;
}

您可以使用Phunehe的建议
text=[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespace and newlinecharacterset]]
删除任何最后一行空格或换行符。

我假设上面的代码是“IseQualtString:”而不是“IsString Qualto:”?是的,谢谢,我在问题中改了,很有魅力。只是出于好奇,有人知道为什么必须这么做吗?在几乎所有其他语言中,您都不需要执行此步骤,您可以简单地在换行符上执行字符串比较,或者它是UNIX如何解释换行符回车的问题,就像jayw提到的那样?Scott Lance:阅读我的答案。它解释了为什么他的
IsequalString:
消息没有像他预期的那样工作。