【问题标题】:Extra characters in NSScanner (objective-C)NSScanner 中的额外字符(objective-C)
【发布时间】:2014-08-11 16:19:14
【问题描述】:

我在 NSScanner 中解析字符串时遇到了一个小问题。我已经阅读了其他关于此的 SO 帖子,但无法解决这个愚蠢的问题。

我有一个这样的字符串“第一个单词不是=第二个单词”

我的代码是:

NSString *seperator = @" =";
NSCharacterSet *newLineCharacterSet = [NSCharacterSet newlineCharacterSet];


[scanner scanUpToString:seperator intoString:&firstString];
[scanner scanString:seperator intoString:NULL];
scanPosition = [scanner scanLocation];
//scanPosition = scanPosition +2;

secondString = [[scanner string] substringFromIndex:scanPosition];

[scanner scanUpToCharactersFromSet:newLineCharacterSet intoString:&secondString];

NSLog(@"firstString: %@", firstString);
NSLog(@"secondString: %@", secondString);

问题是我将分隔符作为 secondString 的一部分。

firstString: "the first word is not"
secondString is "= to the second word"      

【问题讨论】:

    标签: objective-c nsscanner


    【解决方案1】:

    这是我在 Xcode 中运行的:

    NSString *seperator = @" =";
    NSCharacterSet *newLineCharacterSet = [NSCharacterSet newlineCharacterSet];
    
    NSScanner *scanner = [NSScanner localizedScannerWithString:@"the first word is not = to the second word"];
    
    //NSString *firstString; //= @"the first word is not = to the second word";
    NSString *secondString;
    int scanPosition;
    NSString *foundSubs;
    
    [scanner scanUpToString:seperator intoString:&foundSubs];
    //[scanner scanString:seperator intoString:NULL];
    scanPosition = [scanner scanLocation];
    //scanPosition = scanPosition +2;
    
    secondString = [[scanner string] substringFromIndex:scanPosition+[seperator length]];
    
    //[scanner scanUpToCharactersFromSet:newLineCharacterSet intoString:&secondString];
    
    NSLog(@"firstString: %@", foundSubs);
    NSLog(@"secondString: %@", secondString);
    

    得到:

    2014-08-11 11:56:10.495 tester[3068:60b] firstString: the first word is not
    2014-08-11 11:56:10.496 tester[3068:60b] secondString:  to the second word
    

    为了后代检查“分隔符”的拼写

    【讨论】:

    • 非常感谢,欢迎来到 SO。很好的答案,非常感谢。我希望世界会改变分隔符的拼写,但我想这不是......
    • 谢谢!很高兴有帮助
    【解决方案2】:

    所以你想分离字符串?可以使用 NSString 的componentsSeparatedByString 方法。

    NSArray* foo = [@"the first word is not = to the second word" componentsSeparatedByString: @"="];
    
    NSString *firstString = foo[0]; //the first word is not 
    NSString *secondString = foo[1]; // to the second word
    

    如果您想使用扫描仪,您必须将扫描仪的位置移过分隔符,正如您在代码中注释掉的那样。

    【讨论】:

    • 感谢您的出色回答,但我想坚持使用扫描仪,因为我想做更多过滤......所以 +1 但我给了接近第一次海报......
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2016-05-23
    • 2010-12-05
    • 2012-07-26
    • 2015-01-02
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多