swift2 Swift中的转义字符串

jk9hmnmh  于 2022-11-18  发布在  Swift
关注(0)|答案(1)|浏览(220)

我将以编程方式创建一个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;
}

然而,在我去转换之前,我想问一下社区,现在我们在Swift 2中,是否有更简单的方法。是否有任何有趣的/新的字符串变化发生了,我可能想考虑支持“快速化”上述代码?我做了一些谷歌搜索,但没有跳出来,我真的想确保我在这里做得很好。:-)
谢谢你!

dddzy1tm

dddzy1tm1#

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

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

        return newString
    }
}

也很少测试:

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"

相关问题