【问题标题】:Get String from Substring at a particular range从特定范围的子字符串中获取字符串
【发布时间】:2021-03-10 02:37:06
【问题描述】:

我想写一个函数来检查一个字符串的最后 3 个字符是否是另一个字符串的一部分,如果是,我只返回 true,否则返回 false。

示例:-

let str1 = "abc"
let str2 = "HiaBC"

我想在这里检查的是 str1 是否存在于 str2 的最后一个字符中,无论是否区分大小写。

我试过了

str2.contains("HI") // returned true as abc existed, should have returned false as it was not in the last 3 characters of the string.

func checkSubstring(str1:String, str2:String) -> Bool {
    if str2.contains(str1) {
        return true
    }
    return false
}

我想要以某种方式应用某个范围并检查最后 3 个字符是否存在于子字符串中。

任何人都可以提出任何建议吗?

【问题讨论】:

    标签: swift string substring


    【解决方案1】:

    您可以将range(of:) 与适当的选项一起使用:

    • .caseInsensitive 用于不区分大小写的搜索,
    • .backwards 从字符串末尾开始搜索,并且
    • .anchored 将搜索限制在源字符串的末尾。
    func checkSubstring(str1:String, str2:String) -> Bool {
        return str2.range(of: str1, options: [.caseInsensitive, .backwards, .anchored]) != nil
    }
    

    例子:

    print(checkSubstring(str1: "abc", str2: "HiaBC")) // true
    print(checkSubstring(str1: "ab", str2: "HiaBC")) // false
    

    【讨论】:

    • 请注意,这需要导入 Foundation。
    • 此外,这似乎会为“aße”和“asse”等极端情况提供误报。
    • @Cristik: "ß".caseInsensitiveCompare("ss") == .orderedSame 也返回 true - 可能是因为 "ß".uppercased()"ss".uppercased() 都等于“SS”。
    • 这可能是原因,但另一方面,Vadian 的代码似乎适用于这种特殊情况:)
    • @Cristik:这更像是他使用suffix()的副作用。
    【解决方案2】:

    suffix(3) 只考虑最后三个字符,caseInsensitiveCompare 不言自明。

    func checkSubstring(str1: String, str2: String) -> Bool {
        return str2.suffix(3).caseInsensitiveCompare(str1) == .orderedSame
    }
    

    【讨论】:

    • 请注意,这需要导入 Foundation。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2012-08-14
    • 2012-12-28
    相关资源
    最近更新 更多