Swift-在字符串的两个位置之间查找子字符串

显示名称

我有一个格式如下的字符串:“ XbfdASF; FBACasc | Piida; bfedsSA | XbbnSF; vsdfAs |”

基本上是一个ID; ID | 然后重复。

我有第一个ID,我需要找到它的伙伴。示例:我有'Piida',我需要在';'之后找到跟在它后面的字符串。这是“ bfedsSA”

我该怎么做呢?

我遇到的问题是ID的长度是动态的,因此我需要获取'|'的索引 在ID之后有一个'Piida',然后获取这些索引之间的字符串,在这种情况下,该字符串应为'bfedsSA'。

AstroCB

有很多方法可以做到这一点,但是最简单的方法是使用分隔符将字符串分割成一个数组。

如果您知道JavaScript,则等效于.split()string方法。Swift确实具有此功能,但是如您所见,它可能会有些混乱。您可以像这样扩展String以使其更简单。为了完整起见,我将其包括在此处:

import Foundation

extension String {
    public func split(separator: String) -> [String] {
        if separator.isEmpty {
            return map(self) { String($0) }
        }
        if var pre = self.rangeOfString(separator) {
            var parts = [self.substringToIndex(pre.startIndex)]
            while let rng = self.rangeOfString(separator, range: pre.endIndex..<endIndex) {
                parts.append(self.substringWithRange(pre.endIndex..<rng.startIndex))
                pre = rng
            }
            parts.append(self.substringWithRange(pre.endIndex..<endIndex))
            return parts
        } else {
            return [self]
        }
    }
}

现在,您可以.split()像这样调用字符串:

"test".split("e") // ["t", "st"]

因此,您首先要做的是使用分隔符将ID字符串分成多个段|,因为这是分隔ID的方式:

let ids: [String] = "XbfdASF;FBACasc|Piida;bfedsSA|XbbnSF;vsdfAs|".split("|")

现在,您将拥有一个ID的String数组,如下所示:

["XbfdASF;FBACasc", "Piida;bfedsSA", "XbbnSF;vsdfAs"]

您的ID格式为ID;VALUE,因此您可以像这样再次拆分它们:

let pair: [String] = ids[anyIndex].split(";") // ["ID", "VALUE"]

您可以访问该数组的索引0处的ID和索引1处的值。

例子:

let id: String = ids[1].split(";")[0]
let code: String = ids[1].split(";")[1]

println("\(id): \(code)") // Piida: bfedsSA

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章