Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在obj-c中搜索字符串中的行_Objective C_Cocoa - Fatal编程技术网

Objective c 在obj-c中搜索字符串中的行

Objective c 在obj-c中搜索字符串中的行,objective-c,cocoa,Objective C,Cocoa,我有一个由多行组成的字符串。例: 线路1 A B C 第2行X Y Z 线路3 D E F 如何在该字符串中搜索Y并获得整行?因此,我想将输出设为line2 X Y Z一种方法是首先将字符串分成几行: NSArray *lines = [myString componentsSeparatedByString:@"\n"]; 然后搜索以下行: for (NSString *line in lines) { NSRange *range = [line rangeOfString:@"Y

我有一个由多行组成的字符串。例:

线路1 A B C

第2行X Y Z

线路3 D E F


如何在该字符串中搜索Y并获得整行?因此,我想将输出设为line2 X Y Z

一种方法是首先将字符串分成几行:

NSArray *lines = [myString componentsSeparatedByString:@"\n"];
然后搜索以下行:

for (NSString *line in lines) {
    NSRange *range = [line rangeOfString:@"Y"];
    if (range.length > 0) {
        // do something
    }
}

如果您使用的是iOS 4.0或更高版本,您可以使用
enumerateLinesUsingBlock
,这是Caleb回答的另一种选择

__block NSString * theLine;
[lines enumerateLinesUsingBlock:^(NSString * line, BOOL * stop){
    NSRange range = [line rangeOfString:@"Y"];
    if ( range.location != NSNotFound ) {
        theLine = [line retain];
        *stop = YES;
    }
}];

/* Use `theLine` for something */
[theLine release]; // Relinquish ownership

你可以做这样的事

- (NSString *)LineTextFinder:(NSString*)inData Serach:(char)inSearch LineDelimiter:(char)inChar
{
    int lineStart = 0;
    int lineEnd =0;

    int i = 0;
    BOOL found = NO;

    while (1)
    {
        if(i > [inData length])
        {
            lineStart = lineEnd;
            lineEnd = i;

            break;
        }
        if (inChar == [inData characterAtIndex:i])
        {
            lineStart = lineEnd;
            lineEnd = i;


            //we can brack only when we travell end of found line
            if (found)
            {
                break;
            }
        }

        if(inSearch == [inData characterAtIndex:i])
        {
            found = YES;
        }
        i++;
    }


    NSString *returnStr = nil;
    if ((found))
    {
        NSRange splitRange = {lineStart,(lineEnd-lineStart)};
        returnStr = [inData substringWithRange:splitRange];
    }

    return returnStr;
}

嘿@Deepak:我需要一些建议。你能帮我吗?