尝试转义NSString对象中的空间

时间:2018-07-12 10:45:19

标签: objective-c macos nsstring escaping

我有一个路径,其中可能包含一些空间,这些空间我以后想作为参数传递给在macOS上运行的Shell脚本。为了使其正常工作,我必须使用退格字符以与bash执行命令完成时相同的方式来转义空格。

示例:这是开始的路径:

dbHome="/Library/Application Support/MimerSQL"

这是我想在转义空格后拥有的东西:

dbHome="/Library/Application\ Support/MimerSQL"

为了进行此替换,我这样叫stringByReplacingOccurrencesOfString

dbHome = [dbHome stringByReplacingOccurrencesOfString:@" " withString:@"\ "];

但这给了我一个编译器警告(“未知转义序列'\'”),并且得到的字符串与原始字符串相同。然后,我尝试这样逃避退格字符:

dbHome = [dbHome stringByReplacingOccurrencesOfString:@" " withString:@"\\ "];

并摆脱了编译器警告,但它导致的字符串与我想要的完全不同:

dbHome="/Library/Application\\ Support/MimerSQL"

所以我被困住了。 :(

底线:如何从“ ...应用程序支持...”转到“ ...应用程序\支持...”?

2 个答案:

答案 0 :(得分:2)

尝试此代码

        NSString *dbHome=@"/Library/Application Support/MimerSQL";
        NSString *spaceString =@" ";
        NSString *backslash = @"\\";
        dbHome = [dbHome stringByReplacingOccurrencesOfString:@" " withString:[NSString stringWithFormat:@"%@%@",backslash,spaceString]];

答案 1 :(得分:1)

您做对了。为此,您需要将@" "替换为@"\\ "

您将在调试中看到

/Library/Application\\ Support/MimerSQL

但是当您尝试登录或使用它时,它将是预期的。

/Library/Application\ Support/MimerSQL