簡體   English   中英

如何在字符串中最后一次出現字符后獲取子字符串:Swift IOS

[英]How to get substring after last occurrence of character in string: Swift IOS

基本上,我想制作一個程序,如果您開始輸入名稱,應用程序將從數據庫中識別它並為您填寫名稱。 為此,如果有人在完成名稱后鍵入逗號,應用程序將開始記錄下一個名稱是什么。 如果它作為數據庫中某個名稱的子字符串匹配,它將為用戶填充它。 問題是,在 textField 字符串中最后一次出現逗號字符之后,我需要獲取名稱的哪一部分已填寫,但我不知道如何。 例如: 用戶類型:“Daniel, Joh” 應用程序會為您填寫 John。 謝謝。

如果你真的想要最后一個逗號之后的字符,你可以使用正則表達式:

let string = "Hamilton, A"
let regex = try! NSRegularExpression(pattern: ",\\s*(\\S[^,]*)$")
if let match = regex.firstMatch(in: string, range: string.nsRange), let result = string[match.range(at: 1)] {
    // use `result` here
}

在 Swift 4 中:

extension String {

    /// An `NSRange` that represents the full range of the string.

    var nsRange: NSRange {
        return NSRange(startIndex ..< endIndex, in: self)
    }

    /// Substring from `NSRange`
    ///
    /// - Parameter nsRange: `NSRange` within the string.
    /// - Returns: `Substring` with the given `NSRange`, or `nil` if the range can't be converted.

    subscript(nsRange: NSRange) -> Substring? {
        return Range(nsRange, in: self)
            .flatMap { self[$0] }
    }
}

非常感謝羅布。 我們甚至可以通過包含對初始問題的完整答案以及任何字符來擴展他的字符串擴展:

extension String {

func substringAfterLastOccurenceOf(_ char: Character) -> String {

    let regex = try! NSRegularExpression(pattern: "\(char)\\s*(\\S[^\(char)]*)$")
    if let match = regex.firstMatch(in: self, range: self.nsRange), let result = self[match.range(at: 1)] {
        return String(result)
    }
    return ""
}

// ... Rob's String extension 

}

所以我們只需要調用:

let subStringAfterLastComma = "Hamilton, A".substringAfterLastOccurenceOf(",")

具有range(of和 options regularExpressionbackwards的簡單解決方案。

它搜索逗號后跟可選的空白字符。

extension String {
    var subStringAfterLastComma : String {
        guard let subrange = self.range(of: ",\\s?", options: [.regularExpression, .backwards]) else { return self }
        return String(self[subrange.upperBound...])
    }
}

let string1 = "Dan".subStringAfterLastComma // "Dan"
let string2 = "Daniel, Joh".subStringAfterLastComma // "Joh"

感謝 Rob 和 Thierry G。

extension String {
    
    var nsRange: NSRange {
        return Foundation.NSRange(startIndex ..< endIndex, in: self)
    }
    
    subscript(nsRange: NSRange) -> Substring? {
        return Range(nsRange, in: self)
            .flatMap { self[$0] }
    }
    
    func substringAfterLastOccurenceOf(_ char: Character) -> String {
        
        let regex = try! NSRegularExpression(pattern: "\(char)\\s*(\\S[^\(char)]*)$")
        if let match = regex.firstMatch(in: self, range: self.nsRange), let result = self[match.range(at: 1)] {
            return String(result)
        }
        return ""
    }
}

我們可以這樣使用

let subStringAfterLastComma = "Hamilton, A".substringAfterLastOccurenceOf(",")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM