objective-c - Cocoa/Objective-C 中的简单字符串解析 : parsing a command line into command and arguments

标签 objective-c regex cocoa parsing command-line

这是一段代码,用于获取表示命令行的字符串(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。另外,我一点也不确定我是否正确地处理了自动发布。

添加:该解决方案还应对初始空白具有鲁棒性。此外,我最初将输入字符串称为 inputinStr。很抱歉造成困惑。

添加:我相信上面的代码正确的一件事是到目前为止答案没有正确的是 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/

相关文章:

iphone - 我需要在xcode4.2中恢复dealloc吗?

iphone - xcode sqlite3 libsqlite.dylib

java - 在正则表达式模式匹配后删除部分匹配器

objective-c - 有没有办法减小 NSWorkSpace 启动的窗口的大小?

objective-c - 如何在 NSCollectionView 中正确显示当前选择?

ios - 如何创建自己的完成处理程序作为方法参数的一部分

objective-c - UItableview可变部分标题高度和内容

regex - 用正则表达式修剪电话号码

python - 使用 Python 重命名目录中的所有文件

objective-c - NSTextField 在自定义 NSWindow 中不可编辑