在 Swift 中从字符串中提取某些文本
Posted
技术标签:
【中文标题】在 Swift 中从字符串中提取某些文本【英文标题】:Extracting certain text from String in Swift 【发布时间】:2016-12-07 08:12:49 【问题描述】:我希望在 Swift 2.x 中做到这一点: 假设我在文本字段中输入文本。 - '苹果 iPhone http://www.apple.com'
我现在正在更新带有标签的 UIButton - Apple iPhone。当单击按钮启动'http://www.apple.com时,我想要IBAction。
我可以设置它,但我遇到问题的部分是 - 如何从文本字段中解析“Apple iPhone”和“http://www.apple.com”并将它们分开,以便我可以使用一些文本更新 UIButton 标签和使用 URL 启动 Safari 吗?更具体地说,我希望能够检测任何“文本”后跟“http://”,并始终使用文本来更新标签,并使用 http 来启动带有 url 的浏览器。 感谢您的回答。
【问题讨论】:
可能重复:***.com/questions/27040924/nsrange-from-swift-range 【参考方案1】:这个问题有一个简单的解决方案,如下所述
var x = "Apple iPhone http://www.apple.com"
@IBAction func click(_ sender: UIButton)
let url = x.substring(from: x.range(of: "http")!.lowerBound)
UIApplication.shared.openURL(NSURL(string: url)! as URL)
但是这个解决方案和所有给定的解决方案都存在问题,
如果您有这样的字符串:var x = "Apple iPhone http://www.apple.com wwdc"
,您将无法获得正确的结果。
通用解决方案可以是这样的:
@IBAction func click(_ sender: UIButton)
var text = "Apple iPhone http://www.apple.com wwwdc"
let startIndex = text.range(of: "http")?.lowerBound
var startString = text.substring(from: startIndex!)
let endIndex = startString.range(of: " ")!.lowerBound
var url = startString.substring(to: endIndex)
UIApplication.shared.openURL(NSURL(string: url)! as URL)
它会正确提取网址。
【讨论】:
似乎它是获取确切网址的更好解决方案?? 如何将“Apple iPhone”单独存储在一个单独的字符串中? @NetCodlet appleIphone = text.substring(to: startIndex!)
【参考方案2】:
你可以使用 datadetactor 找到字符串上的 url,试试这个
let types: NSTextCheckingType = .Link
let detector = try? NSDataDetector(types: types.rawValue)
let matches = detector!.matchesInString("your_string", options: .ReportCompletion, range: NSMakeRange(0,ActivityText!.characters.count))
if matches.count > 0
let urlResult = matches.first
let url = urlResult?.URL
//now open this url
【讨论】:
谢谢。将研究此解决方案并使用 NSDataDetector。没有意识到这一点。我还将如何跟踪 url 之前的其余文本,以便我可以单独保存?【参考方案3】:你需要使用
来自基础框架的componentsSeparatedByString 方法。
它返回一个字符串数组。
let array = inputField.text.componentsSeparatedByString("http://")
在您的情况下,它将在一个数组中有 2 个对象。首先是标签的文本,其次是您要在 webView 中打开的 URL。
if array.count>=2
let text = array[0]
let url = array[1]
【讨论】:
这个解决方案似乎更简单。会试一试。谢谢。 不是一个好的解决方案,因为它仅适用于字符串的这种情况以上是关于在 Swift 中从字符串中提取某些文本的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift 中的加密 JSON 字符串中提取某些字段?