gpt4 book ai didi

iphone - 使用 NSScanner 解析字符串

转载 作者:行者123 更新时间:2023-12-03 18:00:49 27 4
gpt4 key购买 nike

我正在尝试解析具有如下格式的字符串:

*date1:
- band1.1 @ venue1.1.
- band1.2 @ venue1.2.
*date2:
- band 2.1 @ venue2.1.
- band 2.2 @ venue2.2.

等等

日期数量、乐队数量以及相关 field 可能会有所不同。我正在使用基于 this page 底部示例的代码.

我正在使用这段代码(我省略了底部的位,因为它们不相关,但是是的,我确实关闭了循环等):

 NSScanner *scanner1 = [NSScanner scannerWithString:contents];
NSCharacterSet *colon = [NSCharacterSet characterSetWithCharactersInString:@":"];
NSCharacterSet *at = [NSCharacterSet characterSetWithCharactersInString:@"@"];
NSCharacterSet *dot = [NSCharacterSet characterSetWithCharactersInString:@"."];
NSLog(@"scanner starting");

while ([scanner1 isAtEnd] == NO) {
if ([scanner1 scanString:@"*" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:colon intoString:&tempDate] && [scanner1 scanString:@":" intoString:NULL])
{
NSLog(@"%@", tempDate);
if ([scanner1 scanString:@"-" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:at intoString:&tempBands] && [scanner1 scanString:@"@" intoString:NULL] && [scanner1 scanUpToCharactersFromSet:dot intoString:&tempVenue]
&&[scanner1 scanString:@"." intoString:NULL])
{
NSLog(@"%@ %@", tempBands, tempVenue);
}
}
} NSLog(@"ended scanning");

目前,第一个日期被解析并打印到控制台,并且打印该日期的第一个地点和乐队。 “扫描结束”永远不会被打印。我已经为此奋斗了几个小时,但我不确定现在该怎么办。我有一种感觉,我不了解 NSScanner 的内部工作原理,并且可能有不同的方法来解决这个问题。也许我需要第二台扫描仪?

最佳答案

在第一轮 while 循环之后,扫描仪的位置就在 “venue1.” 之后。下一轮循环从扫描星号开始,但扫描失败(返回 NO),因为下一个(非空白)字符是破折号。因此,if 语句的主体不会被执行,扫描仪的位置也不会进一步前进,从而导致无限循环。

关于iphone - 使用 NSScanner 解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577270/

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