【问题标题】:use NSScanner to parse string使用 NSScanner 解析字符串
【发布时间】:2011-10-14 06:24:14
【问题描述】:

要解析的两行字符串是:

00:02.0 VGA compatible controller [0300]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2772] (rev 02)
00:02.1 Display controller [0380]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2776] (rev 02)

取出这些字符串:

(从第一行开始)

  • VGA 兼容控制器
  • 英特尔公司 82945G/GZ 集成图形控制器
  • [8086:2772]

(从第二行开始)

  • 显示控制器
  • 英特尔公司 82945G/GZ 集成图形控制器
  • [8086:2776]

现在我的起始代码是:

NSScanner *scn = [NSScanner scannerWithString:strtoparse];
NSString *devtype;      
while ([scn isAtEnd] == NO)
    {
       if( [scn scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL] &&
        [scn scanUpToString:@"[" intoString:&devtype]);
    }

这不起作用。我什至无法理解文档中的扫描仪。那么有人可以发布工作代码吗?

【问题讨论】:

    标签: cocoa nsstring string-parsing nsscanner


    【解决方案1】:

    快速sn-p:

    NSString *theString = @"00:02.0 VGA compatible controller [0300]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2772] (rev 02)\n00:02.1 Display controller [0380]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2776] (rev 02)";
    
    NSScanner *theScanner = [NSScanner scannerWithString:theString];
    
    NSCharacterSet *space = [NSCharacterSet characterSetWithCharactersInString:@" "];
    NSCharacterSet *bracket = [NSCharacterSet characterSetWithCharactersInString:@"["];
    NSCharacterSet *linebreak = [NSCharacterSet newlineCharacterSet];
    
    NSString *type;
    NSString *name;
    NSString *number;
    
    while (![theScanner isAtEnd]) 
    {
        [theScanner scanUpToCharactersFromSet:space intoString:nil] ;
        [theScanner scanUpToCharactersFromSet:bracket intoString:&type]; 
        [theScanner scanUpToCharactersFromSet:space intoString:nil] ;
        [theScanner scanUpToCharactersFromSet:bracket intoString:&name]; 
        [theScanner scanUpToCharactersFromSet:space intoString:&number]; 
        [theScanner scanUpToCharactersFromSet:linebreak intoString:nil] ;
    
        NSLog(type);
        NSLog(name);
        NSLog(number);
    }
    

    输出:

    VGA compatible controller 
    Intel Corporation 82945G/GZ Integrated Graphics Controller 
    [8086:2772]
    Display controller 
    Intel Corporation 82945G/GZ Integrated Graphics Controller 
    [8086:2776]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2011-07-03
      • 1970-01-01
      • 2012-08-06
      • 2011-10-23
      • 2011-07-14
      相关资源
      最近更新 更多