Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Swift-在字符串中的两个位置之间查找子字符串_String_Swift_Substring_Indexof - Fatal编程技术网

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

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”。有很多方法可以做到这一点,但最简单的方法

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

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

我有第一个ID,我需要找到它的合作伙伴示例:我有'Piida',我需要找到它后面的字符串';'哪个是“bfedsSA”

我该怎么做


我遇到的问题是,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 |”