rangeOfString和encoding

时间:2012-11-01 12:09:41

标签: objective-c nsstring

我正在尝试解析我使用NSTask执行的shell命令的输出。寻找特定的子串就足够了,只找不到子串。

到目前为止我的代码:

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data
                               encoding: NSUTF8StringEncoding];

NSLog(string);

if([string rangeOfString:@"Connection refused"].location != NSNotFound) {
    NSLog(@"found");
} else {
    NSLog(@"not found");
}

即使搜索到的子字符串包含在变量 string 中,也始终打印“not found”。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我很惊讶但是当我反过来写这个条件的时候。有效。 请查看以下示例:

NSString *string = @"hello bla Connection refused Connection refused bla";
if ([string rangeOfString:@"Connection refused"].location == NSNotFound) {
    NSLog(@"string does not contain Connection refused");
} else {
    NSLog(@"string contains Connection refused!");
}

希望我很清楚..

答案 1 :(得分:0)

我错了。该命令的输出实际上是空的(因此显然找不到查找的字符串)。我期望NSLog调用的结果实际上是命令直接输出到控制台(stderr?)。对不起:(。