将子字符串与 Swift 中的另一个子字符串匹配

Match substring with another substring in Swift

我正在研究 Swift 4.

需求:我有一个字符串:

var inputString = "Today is very bright day"

我有一个包含字符串键值对的文件。

{
    "Birthday": ["brand day", "burn day", "bright day", "brick daya"],
    "Temporary": ["tempora", "temporar", "tempura"]
}

所需的数学运算:在应用程序中,如果 inputString 是 "Today is very bright day",我需要检查此字符串是否包含键值对文件中的任何值,并将出现的值替换为键。

例如:在上面的例子中:inputString = "Today is very bright day" 将其与文件匹配。 将 bight day 替换为 birthday 以便 inout 字符串变为 inputString = "Today is very birthday".

有什么办法吗?键值文件可能很大。

我认为无论如何您都必须遍历每个键值对的每个列表,但这是替换子字符串的基本方法。

import Foundation

let replacer = "Birthday"
let replacees = ["brand day", "burn day", "bright day", "brick daya"]

var inputString = "Today is very bright day"

for phrase in replacees {
    inputString = inputString.replacingOccurrences(of: phrase, with: replacer)
}

print(inputString) //should print "Today is very birthday"

无论如何,如果不遍历您的键值列表,我无法实现您想要的,但这是一个解决方案。不知道有没有效果,大家可以试试

        if let path = Bundle.main.path(forResource: "fileName", ofType: "json") {
            do {
                let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
                let jsonResult = try JSONSerialization.jsonObject(with: data, options: .allowFragments)

                if let keyValueArray = jsonResult as? [String: [String]]{
                    var inputString = "Today is very bright day"

                    for (key, value) in keyValueArray {
                        let regex = "\b" + value.joined(separator: "|\b")

                        inputString = inputString.replacingOccurrences(of: regex, with: key, options: .regularExpression, range: nil)
                    }

                    print(inputString)
                }
            } catch {
                return
            }
        }

你可以使用强力解决方案,它将是 2 个 for 循环,我正在努力改进它

  var inputString = "Today is very bright day"

        let file  = ["Birthday":["brand day", "burn day", "bright day", "brick daya"],"Temporary": ["tempora", "temporar", "tempura"]]

        file.forEach { (key,value) in
            value.forEach({ (item) in
               inputString =  inputString.replacingOccurrences(of: item, with: key)
            })
        }

        print(inputString)