2016-04-28 28 views
1

基本上,我想制作一个程序,如果您开始输入名称,应用程序将从数据库中识别出它,并为您填写名称。为此,如果某人在完成名称后输入逗号,则该应用程序将开始记录下一个名字。如果它与数据库中某个名称的子字符串相匹配,则会为用户填充它。问题是我需要在textField字符串中最后一次出现逗号字符之后才知道名称的哪部分已被填充,但我不知道如何。例如: 用户类型:“Daniel,Joh” 该应用程序为您填写John。谢谢。如何获取字符串中最后一次出现字符后的子串:Swift IOS

回答

2

如果你真的想在最后一个逗号后面的字符,你可以使用正则表达式:

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 
} 

凡在雨燕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 `utf16`. 
    /// - Returns: Substring with the given `NSRange`, or `nil` if the range can't be converted. 

    subscript(nsRange: NSRange) -> Substring? { 
     guard let range = Range(nsRange, in: self) else { return nil } 

     return self[range] 
    } 
} 
+0

是否正则表达式的解决方案也行,如果有名单上有两个以上的名字? – user3798602

+0

对不起,我只是问,因为它说firstMatchInString不是最后一个。谢谢 – user3798602

+0

好的,我明白了这个混乱。但是,如果你看看我的正则表达式字符串,最后一个字符是'$',它表示“匹配字符串的末尾”。因此,你只会得到一个匹配,最后一个匹配(如果有的话)。我只使用'firstMatchInString',因为由于我们只获得最后一个,所以不需要枚举,只需要在字符串末尾抓住“first”匹配。 – Rob

相关问题