在字符串中查找子字符串的更简单方法(Obj C)

时间:2013-04-20 17:26:16

标签: objective-c string substring

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

我的字符串问题是:(我知道凌乱......)

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

NSMutableArray *components = [NSMutableArray arrayWithArray: [yourString componentsSeparatedByString:@"\""]];
for (int i=0; i<components.count; i++) {
   [components removeObjectAtIndex:i];
}

答案 1 :(得分: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
)