在 Swift 中转义字符串

Nul*_*sis 4 ios swift ios9 swift2

我将以编程方式创建一个 CSV 文件,并希望在写入字符串之前正确转义它们。

我假设我需要转义逗号,并且可能需要用单引号或双引号将每个值括起来(因此也需要转义这些值)。加上任何回车/换行常量。

我本来打算自己写的,但后来在 Objective-C 中发现了这个,并说为什么不直接转换它,因为它看起来很彻底:

-(NSString *)escapeString:(NSString *)s
{
    NSString * escapedString = s;   
    BOOL containsSeperator = !NSEqualRanges([s rangeOfString:@","], NSMakeRange(NSNotFound, 0));
    BOOL containsQuotes = !NSEqualRanges([s rangeOfString:@"\""], NSMakeRange(NSNotFound, 0));
    BOOL containsLineBreak = !NSEqualRanges([s rangeOfString:@"\n"], NSMakeRange(NSNotFound, 0));

    if (containsQuotes) {
        escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\"\""];
    }

    if (containsSeperator || containsLineBreak) {
        escapedString = [NSString stringWithFormat:@"\"%@\"", escapedString];
    }

    return escapedString;
}
Run Code Online (Sandbox Code Playgroud)

然而,在我开始转换之前,我想问问社区,现在我们在 Swift 2 中是否有更简单的方法。是否有任何有趣的/新的字符串发生了我可能想要考虑的支持“Swiftifying”的改变“上面的代码?我做了一些谷歌搜索,但没有任何反应,我真的想确保我在这里做得很好。:-)

谢谢!

sun*_*ejr 5

您可以减少代码并将其保存为字符串扩展名:

extension String {
    func escapeString() -> String {
        var newString = self.stringByReplacingOccurrencesOfString("\"", withString: "\"\"")
        if newString.containsString(",") || newString.containsString("\n") {
            newString = String(format: "\"%@\"", newString)
        }

        return newString
    }
}
Run Code Online (Sandbox Code Playgroud)

还有几个测试:

var test1 = String("Test")
test1.escapeString() // produces Test

var test2 = String("Test\n")
test2.escapeString() // produces "Test\n"

var test3 = String("Test, Test2")
test3.escapeString() // produces "Test, Test2"
Run Code Online (Sandbox Code Playgroud)