【问题标题】:Escaping Strings in Swift在 Swift 中转义字符串
【发布时间】:2015-11-22 21:46:11
【问题描述】:

我将以编程方式创建一个 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 中是否有更简单的方法。我可能想要考虑支持的字符串是否发生了任何有趣/新的变化“Swiftifying”上面的代码?我做了一些谷歌搜索,但没有任何反应,我真的想确保我在这里做得很好。 :-)

谢谢!

【问题讨论】:

    标签: ios swift swift2 ios9


    【解决方案1】:

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

    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"
    

    【讨论】:

    • 啊,这真是太好了——真的很干净。我在想类似的事情。非常感谢您抽出宝贵时间。
    • 这假定您希望逗号作为 CSV 文件中的字段分隔符。其他分隔符也是可能的,例如制表符、空格、分号等。
    • escapeString 是一个完全没有描述性的名称,更不用说添加到 String 的方法。想想 Apple 会如何命名该方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多