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

时间:2014-12-06 15:03:25

标签: string swift substring indexof

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

Basiclly是一个ID; ID |然后它重复。

我有第一个ID,我需要找到它的合作伙伴示例:我有'Piida',我需要找到';'之后跟随它的字符串这是'bfedsSA'

我该怎么做?

我遇到的问题是ID的长度是动态的,所以我需要得到'|'的索引我拥有的ID是'Piida',然后得到这些索引之间的字符串,在这种情况下应该是'bfedsSA'。

1 个答案:

答案 0 :(得分:3)

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

如果您了解JavaScript,则它等同于.split()字符串方法;斯威夫特does have this functionality,但正如你在那看到的那样,它会变得有些混乱。您可以扩展String like this以使其更简单一些。为了完整起见,我将在此处加入:

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