2014-12-06 126 views
2

我有一個格式如下所示的字符串:「XbfdASF; FBACasc | Piida; bfedsSA | XbbnSF; vsdfAs |」Swift - 在字符串中的兩個位置之間查找子字符串

Basiclly它的一個ID; ID |然後重複。

我有第一個ID,我需要找到它的合作伙伴示例:我有'Piida',我需要在';'之後找到跟隨它的字符串。這是'bfedsSA'

我該怎麼做?

我遇到的問題是ID的長度是動態的,所以我需要得到'|'的索引。後面的ID是'Piida',然後得到這些索引之間的字符串,在這種情況下應該是'bfedsSA'。

+0

編碼的數據結構轉換爲字符串有它的地方,但你會是不明智的放棄鄰爲字符串構造類型。所以,一旦你得到你的字符串拆分,你會想要使用'數組對',或者,如果所有的第一個元素是唯一的,只需一個字典。爲什麼我在「如何分裂」的問題中提到這一點?由於'StringLiteralConvertible'協議!在Dictionary上實現該協議(或者更好地使用你自己的數據結構),然後你可以使用'var data:[String:String] =「XBfdASF; .... As |」 – GoZoner 2014-12-06 15:57:09

回答

3

有很多方法可以做到這一點,但最簡單的方法是使用分隔符將字符串拆分爲數組。

如果您認識JavaScript,則相當於.split()字符串方法; Swift does have this functionality,但正如你在那裏看到的那樣,它會變得有點混亂。您可以擴展字符串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的字符串數組,看起來像這樣:

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

你的ID是在格式ID;VALUE,這樣你就可以像這樣再次分裂他們:

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

您可以在索引1

在該數組的索引0和值訪問ID

例子:

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

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

實際上,Swift *有一個split()函數,您可以在這裏使用它(例如,請參閱http://stackoverflow.com/a/25229901/1187415)。 – 2014-12-06 15:32:54

+0

@MartinR哇,這很有趣。我認爲擴展String使得語法更簡單一些,但我會牢記這一點。 – AstroCB 2014-12-06 15:34:05

+0

很好的答案。快速提問:如何找到陣列中ID的索引?即我有ID'Piida'在數組中找到索引的簡短方法是什麼? – 2014-12-06 15:44:16

相關問題