0
NSString *mainString =
@"COLOUMN1:Shaddy Van Dust COLOUMN2:245876 COLOUMN3:Info 3\nCOLOUMN1:Da Dirk COLOUMN2:45678 COLOUMN3:xcode\n";

这是我要解析的 NSString 示例。我的真实字符串大约有 31 行。每个信息都有前缀“COLOUMNx”,就像“Shady Van Dust”之前一样。(每次都是 COLOUMN1、COLOUMN2 和 COLOUMN3,但之后的每个信息每次都不同,并且长度不同。)每行以 '\n' 结尾。我的字符串中的最后一个标记是'\n'。(除了'\0')(每行和我的字符串通常以哪个标记结束并不重要,如果这样更容易的话。)

现在,我想将 COLOUMN1、COLOUMN2 和 COLOUMN3 之间的每个信息复制到一个临时字符串中以使用它。我想重复直到我的字符串结束。

我已经尝试过 rangeOfString 之类的方法,但是 COLOUMN1、*2 和 *3 存在于每一行中 - 在同一个字符串中。

我需要做什么?..

4

3 回答 3

0

How about this?

NSString *mainString =
    @"COLOUMN1:Shaddy Van Dust COLOUMN2:245876 COLOUMN3:Info 3\nCOLOUMN1:Da Dirk COLOUMN2:45678 COLOUMN3:xcode\n";

    NSArray *strArray = [mainString componentsSeparatedByString:@"COLOUMN"];
    NSMutableDictionary *stringDictionary = [[NSMutableDictionary alloc] init];
    NSInteger idx = 1;

    for (NSString *thisString in strArray) {
        if ([thisString length] > 2) {
            NSString *trimmedString = [thisString substringFromIndex:2];
            [stringDictionary setValue:[trimmedString stringByReplacingOccurrencesOfString:@"\n" withString:@""]
                                forKey:[NSString stringWithFormat:@"String%d",idx]];
            idx++;

        }
    }

    NSLog(@"stringDictionary = %@", [stringDictionary description]);

Outputs:

2012-09-13 07:16:02.064 SO String Parsing[21203:f803] stringDictionary = {
    String1 = "Shaddy Van Dust ";
    String2 = "245876 ";
    String3 = "Info 3";
    String4 = "Da Dirk ";
    String5 = "45678 ";
    String6 = xcode;
}
于 2012-09-13T12:17:02.240 回答
0

您可以尝试使用:

NSMutableArray *arrayOfStrings = [mainString componentsSeparatedByString:@"\n"];

这会给你一个像这样的 NSStrings 数组:

0 -> COLOUMN1:Shaddy Van Dust COLOUMN2:245876 COLOUMN3:Info 3

1 -> COLOUMN1:Da Dirk COLOUMN2:45678 COLOUMN3:xcode

2 -> [...]

该数组包含 NSStrings,您可以使用[arrayOfStrings objectAtIndex:index];.

我不确定你能用它做什么,但我认为你越来越接近拥有你想要的单独字符串......

希望能帮助到你 !

编辑 :

你可以走得更远。启动一个遍历您的阵列的循环。

获取 index 的字符串i

NSString *stringToEdit = [arrayOfStrings objectAtIndex: i];

将您的字符串分成另一个数组:

NSMutableArray *arrayOfLine = [stringToEdit componentsSeparatedByString:@"COLOUMN"];

您现在有一个新数组:

[@"", @"1:Shaddy Van Dust", @"2:245876", @"3:Info 3"]

请注意开头的空字符串,因为您划分的字符串以分隔符开头,而第二个和第三个字符串末尾的空格。

现在再次访问该数组,您将能够处理您的字符串!

祝你好运 !

于 2012-09-13T11:35:51.833 回答
0

使用componentsSeparatedByString:. 我将解释一个简单的方法(可能有更好的方法):

首先将字符串分成一个行数组,如下所示:

NSArray* rowStrings = [mainString componentsSeparatedByString:@"\n"];

然后再次使用它将数据分成列:

NSArray* columnStrings = [[rowStrings objectAtIndex:i] componentsSeparatedByString:@" COLOUMN"];

您必须:再次删除NSString* columnData = [[columnStrings componentsSeparatedByString:@":"] objectAtIndex:1];

于 2012-09-13T11:38:17.177 回答