这是一段代码,用于获取表示命令行的字符串(NSString 或 NSAttributedString)input
并将其解析为两个字符串,命令 cmd
和参数 args
:
NSString* cmd = [[input mutableCopy] autorelease];
NSString* args = [[input mutableCopy] autorelease];
NSScanner* scanner = [NSScanner scannerWithString:[input string]];
[scanner scanUpToCharactersFromSet:[NSCharacterSet
whitespaceAndNewlineCharacterSet]
intoString:&cmd];
if (![scanner scanUpToString:@"magicstring666" intoString:&args]) args = @"";
这似乎可行,但魔法字符串是一个非常荒谬的 hack。另外,我一点也不确定我是否正确地处理了自动发布。
添加:该解决方案还应对初始空白具有鲁棒性。此外,我最初将输入字符串称为 input
和 inStr
。很抱歉造成困惑。
添加:我相信上面的代码正确的一件事是到目前为止答案没有正确的是 args 不应该有任何初始空格。
最佳答案
NSString *cmd;
NSScanner *scanner = [NSScanner scannerWithString:[inStr string]];
[scanner scanUpToCharactersFromSet:[NSCharacterSet
whitespaceAndNewlineCharacterSet]
intoString:&cmd];
NSString *args = [[scanner string] substringFromIndex:[scanner scanLocation]];
您的自动释放没问题,但首先分配字符串是不必要的,因为 NSScanner 通过引用返回一个新字符串。由于 NSScanner 的 charactersToBeSkipped 默认包含空格,因此它不应该被初始空格绊倒。
关于objective-c - Cocoa/Objective-C 中的简单字符串解析 : parsing a command line into command and arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/422242/