gpt4 book ai didi

ios - Swift 4.2 使用多个字符作为分隔符提取子字符串

转载 作者:行者123 更新时间:2023-11-30 11:00:07 29 4
gpt4 key购买 nike

我是 Swift 新手,在浏览了 Apple 文档和其他来源后,我不清楚如何使用多个字符作为分隔符来提取子字符串。例如:我有一个看起来像这样的字符串:

A.1 值1B.2 值2E值3C值4

并且需要将值 1 - 4 分配给不同的变量。

最佳答案

• 可能的解决方案:
1.分隔所有元素(分隔符:空格)
2. 2乘2迭代并使用键/值系统,例如字典
3. 随后从键中读取每个值

第 1 步:

let string = "A.1 value1 B.2 value2 E value3 C value4"
let components = string.components(separatedBy: CharacterSet.whitespaces)

第 2 步:

var dictionary: [String: String] = [:]
stride(from: 0, to: components.count - 1, by: 2).forEach({
dictionary[components[$0]] = components[$0+1]
})

let dictionary = stride(from: 0, to: components.count - 1, by: 2).reduce(into: [String: String]()) { (result, currentInt) in 
result[components[currentInt]] = components[currentInt+1]
}

字典["A.1": "value1", "C": "value4", "E": "value3", "B.2": "value2 ”]

Inspiration对于我很少使用的 stride(from:to:)

第 3 步:

let name = dictionary["A.1"]
let surname = dictionary["C"]

• 潜在问题:
如果您有:

let string = "A.1 value One B.2 value2 E value3 C value4"

你想要“value One”,并且由于有空格,你会遇到一些问题,因为 if 会给出错误的结果(因为有分隔符)。您将得到:字典的["A.1": "value", "One": "B.2", "value2": "E", "value3": "C"] >.

因此您可以使用正则表达式:A.1(.*)B.2(.*)E(.*)C(.*)(例如)。

let string = "A.1 value One B.2 value2 E value3 C value4"
let regex = try! NSRegularExpression(pattern: "A.1(.*)B.2(.*)E(.*)C(.*)", options: [])

regex.enumerateMatches(in: string, options: [], range: NSRange(location: 0, length: string.utf16.count)) { (result, flags, stop) in
guard let result = result,
let aValueRange = Range(result.range(at: 1), in: string),
let bValueRange = Range(result.range(at: 2), in: string),
let cValueRange = Range(result.range(at: 4), in: string),
let eValueRange = Range(result.range(at: 3), in: string) else { return }
let aValue = string[aValueRange].trimmingCharacters(in: CharacterSet.whitespaces)
print("aValue: \(aValue)")
let bValue = string[bValueRange].trimmingCharacters(in: CharacterSet.whitespaces)
print("bValue: \(bValue)")
let cValue = string[cValueRange].trimmingCharacters(in: CharacterSet.whitespaces)
print("cValue: \(cValue)")
let eValue = string[eValueRange].trimmingCharacters(in: CharacterSet.whitespaces)
print("eValue: \(eValue)")

}

输出:

$>aValue: value One
$>bValue: value2
$>cValue: value4
$>eValue: value3

请注意,修剪可能位于正则表达式内部,但我不太喜欢太复杂的正则表达式。

关于ios - Swift 4.2 使用多个字符作为分隔符提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477673/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com