将子字符串与 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)
我正在研究 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)