String Swift-在字符串中的两个位置之间查找子字符串
我有一个如下格式的字符串:“XbfdASF;FBACasc | Piida;bfedsa | xbnsf;vsdfAs |” 基本上它是一个ID;ID |然后重复 我有第一个ID,我需要找到它的合作伙伴示例:我有'Piida',我需要找到它后面的字符串';'哪个是“bfedsSA” 我该怎么做String Swift-在字符串中的两个位置之间查找子字符串,string,swift,substring,indexof,String,Swift,Substring,Indexof,我有一个如下格式的字符串:“XbfdASF;FBACasc | Piida;bfedsa | xbnsf;vsdfAs |” 基本上它是一个ID;ID |然后重复 我有第一个ID,我需要找到它的合作伙伴示例:我有'Piida',我需要找到它后面的字符串';'哪个是“bfedsSA” 我该怎么做 我遇到的问题是,ID的长度是动态的,因此我需要在ID之后获取“|”的索引,即“Piida”,然后获取这些索引之间的字符串,在本例中,这些索引应该是“bfedsa”。有很多方法可以做到这一点,但最简单的方法
我遇到的问题是,ID的长度是动态的,因此我需要在ID之后获取“|”的索引,即“Piida”,然后获取这些索引之间的字符串,在本例中,这些索引应该是“bfedsa”。有很多方法可以做到这一点,但最简单的方法是使用分隔符将字符串拆分为数组 如果您知道JavaScript,它相当于
.split()
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]
}
}
}
因此,您首先应该做的是使用分隔符将您的ID字符串拆分为段,分隔符将是|
,因为这就是ID的分隔方式:
let ids: [String] = "XbfdASF;FBACasc|Piida;bfedsSA|XbbnSF;vsdfAs|".split("|")
现在,您有一个ID字符串数组,如下所示:
"test".split("e") // ["t", "st"]
["XbfdASF;FBACasc", "Piida;bfedsSA", "XbbnSF;vsdfAs"]
let pair: [String] = ids[anyIndex].split(";") // ["ID", "VALUE"]
您的ID的格式为ID;值
,因此可以按如下方式再次拆分它们:
"test".split("e") // ["t", "st"]
["XbfdASF;FBACasc", "Piida;bfedsSA", "XbbnSF;vsdfAs"]
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
实际上,Swift有一个split()函数,您可以在这里使用(参见示例)。@martinrwow,这很有趣。我认为扩展字符串使语法更简单,但我会记住这一点。回答得好。快速问题:如何在数组中找到ID的索引?i、 e我有ID'Piida'在数组中查找其索引的短方法是什么?@Displayname Sure:如果将第一个数组再次拆分为
,则可以使用find()
方法
(而不是拆分其中的一个元素),然后使用find()
返回+1的索引来获取第二个ID。我还想看看其他方法。@Displayname如何使用find()
。将数据结构编码到字符串中有它的位置,但放弃字符串的其他结构类型是不明智的。因此,一旦您将字符串拆分,您将希望使用“成对数组”,或者,如果所有第一个元素都是唯一的,则只需使用一个字典。为什么我在“如何分割”的问题中提到这一点?因为StringLiteralConvertible
协议!在Dictionary(或者更好的是您自己的数据结构)上实现该协议,然后您可以使用`var data:[String:String]=“XBfdASF;…As |”