【问题标题】:iPhone rangeOfStringiPhone rangeOfString
【发布时间】:2011-03-24 21:32:02
【问题描述】:

你好 我有一个这样的字符串:

Results for: 123D12 
2010

2009

2008

2007

2006

YEAR: 2006 WEEK: 2 PRODIDNUM: 37911
 ACCESSKEY: FA3540B52F

2005

2004

YEAR: 2004 WEEK: 22 PRODIDNUM: 46178
 ACCESSKEY: 58B2509373

我想找出 ACCESSKEY 来帮助我获取十六进制(在本例中是 FA3540B52F 和 58B2509373)。

问题是,当我使用 rangeOfString 获取访问密钥时,它只会停止到第一个!这是我的代码:

if ([strippedString rangeOfString:@"ACCESSKEY"].location != NSNotFound ) {
    NSUInteger int1=[strippedString rangeOfString:@"ACCESSKEY"].location;

    NSString *finssid = [strippedString substringWithRange:NSMakeRange(int1+11,10)];
    NSLog(@"Output = Found it %d \n",int1);

    NSLog(@"Output =%@ \n \n",finssid);    
}

我在这里做错了什么?

【问题讨论】:

    标签: iphone objective-c nsstring


    【解决方案1】:

    试试这个:

    NSRange searchRange = NSMakeRange(0, [strippedString length]);
    BOOL keepGoing = YES;
    
    // Find all ssid
    while (keepGoing) {
        NSRange accessWord = [strippedString rangeOfString:@"ACCESSKEY" options:NSCaseInsensitiveSearch range:searchRange];
        if (accessWord.location != NSNotFound) {
            // since we have found the access key, we can assume somethings
            // ACCESSKEY: FA3540B52F
            int pos = accessWord.location + 11;
            NSString *ssid = [strippedString substringWithRange:NSMakeRange(pos, pos + 10)];
    
            NSLog(@"SSID: %@", ssid);
    
            // reset our search up a little for our next loop around
            searchRange = NSMakeRange(pos, [strippedString length] - pos);
        } else {
            keepGoing = NO;
        }
    }
    

    `

    【讨论】:

    • 它应该可以工作,但我收到此错误:由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** -[NSCFString substringWithRange:]: Range or index out of bounds'
    • 好的,我修好了!你这样写: NSString *ssid = [strippedString substringWithRange:NSMakeRange(pos, pos + 10)];而不是这个: NSString *fssid = [strippedString substringWithRange:NSMakeRange(pos,10)];
    • 顺便谢谢你!!
    【解决方案2】:

    使用rangeOfString:options:range: 代替rangeOfString:。保存找到匹配项的索引,然后在索引上使用range: 参数开始。这样你就可以循环遍历并且之前的匹配超出了你正在查看的范围。

    【讨论】:

    • 我已经阅读了这个,但我没有弄清楚如何实现它。请给我一个例子吗?
    • 我自己不确定确切的格式,只是在文档中查找。具体哪一部分你没有弄清楚?
    • 这部分:if ([strippedString rangeOfString:@"ACCESSKEY"].location != NSNotFound ) 实际上它停在第一个 ACCESSKEY 上,我想找到字符串中的所有键。
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多