0

我只是想知道是否有一种更简单的方法可以在 Objective C 中的字符串中查找子字符串。

我的字符串是这样的问题:(我知道很乱......)

filename.cpp - line: 1 "comment 1"\nfilename.cpp - line: 1 "comment 2"\nfilename.cpp - line: 1 "comment 3"\n

所以我想要做的是将引号之间的所有位提取到一个数组中。我一直在搞乱componentsSeparatedByString方法,试图操纵字符串足以让我留下“评论”,但这似乎是一种非常混乱的方式。

谢谢你的帮助!

4

2 回答 2

1

也许我不完全理解您的问题,但是:
如果要解析的字符串始终以不包含的内容开头,即如果要提取的第一个子字符串不在字符串的开头,则可以使用

NSMutableArray *components = [NSMutableArray arrayWithArray: [yourString componentsSeparatedByString:@"\""]];
for (int i=0; i<components.count; i++) {
   [components removeObjectAtIndex:i];
}
于 2013-04-20T18:52:05.503 回答
0

您可以使用 NSScanner 扫描\"并存储数组中的所有其他子字符串

NSString *string = @"filename.cpp - line: 1 \"comment 1\"\nfilename.cpp - line: 1 \"comment 2\"\nfilename.cpp - line: 1 \"comment 3\"\n";
NSScanner *scanner = [NSScanner scannerWithString:string];
NSMutableArray *array = [NSMutableArray array];

while (YES) {
    NSString *s;
    [scanner scanUpToString:@"\"" intoString:NULL];
    [scanner setScanLocation:[scanner scanLocation]+1];
    [scanner scanUpToString:@"\"" intoString:&s];
    if(s)
        [array addObject:s];
    if(![scanner isAtEnd])
        [scanner setScanLocation:[scanner scanLocation]+1];
    else break;
}

结果:

array = (
    comment 1,
    comment 2,
    comment 3
)
于 2013-04-20T19:08:54.277 回答