【问题标题】:Swift Get String before SubstringSwift 在子字符串之前获取字符串
【发布时间】:2020-07-03 19:02:42
【问题描述】:

我有一个字符串,这个字符串不断变化。

我抓取了我的字符串的一部分,在代码中可以称为let mySub = "xyz"

原始字符串是随时间变化的,所以不用担心我如何得到mySub,对于这个例子,假设字符串是let baseString = 123123xyz1234

我如何能够在没有硬编码的情况下抓取xyz 之前所有内容的子字符串,以便xyz 的位置可以不同并且子字符串抓取仍然可以正常工作?

【问题讨论】:

标签: swift indexing substring


【解决方案1】:

您可以在baseString中找到mySub的第一个匹配范围,如果找到,则获取上一部分。

let baseString: String = "123123xyz1234"
let mySub = "xyz"
if let range = baseString.range(of: mySub) {
    let beforeStr = baseString[..<range.lowerBound]
}

【讨论】:

    【解决方案2】:

    您可以获取子字符串范围的下限索引,并将子字符串向上获取到该索引。如果您想对变音符号不敏感搜索设置不区分大小写,可以使用localizedStandardRange:

    extension StringProtocol  {
        func substring<S: StringProtocol>(upTo string: S, options: String.CompareOptions = []) -> SubSequence? {
            guard let lower = range(of: string, options: options)?.lowerBound
            else { return nil }
            return self[..<lower]
        }
        func localizedStandardSubstring<S: StringProtocol>(upTo string: S, options: String.CompareOptions = []) -> SubSequence? {
            guard let lower = localizedStandardRange(of: string)?.lowerBound
            else { return nil }
            return self[..<lower]
        }
    }
    

    let string = "123123xyz1234"
    if let substring = string.substring(upTo: "xyz") {
        print(substring)  // "123123\n"
    }
    

    let localized = "123123café1234"
    if let substring = localized.localizedStandardSubstring(upTo: "CAFE") {
        print(substring)  // "123123\n"
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多