2017-07-03 59 views
1

目標:具有內置分隔符的字符串應拆分爲int和另一個字符串。在分隔符序列'###'多次出現的情況下,字符串應始終在最後的'###'處拼接。如何在最後發生的序列中拆分字符串

是否有像string.lastIndexOf(「###」)這樣的運算符,就像在C#中一樣?

這是我的解析器的樣子:

func parseTuple(from string: String) -> (String, Int)? { 
    let parsedString = string.components(separatedBy: "###") 
    if let tupleString = String(parsedString[0]), let tupleInt = Int(parsedString[1]) { 
     return (tupleString, tupleInt) 
    } else { 
     return nil 
    } 
} 
+0

你能提供一個示例輸入和輸出? –

+0

Connect ### Four ###播放器### 7應該被解析爲一個字符串「Connect ### Four ### Player」和一個int 7.所以不管有多少'###'該功能應始終拆分最後一個,並省略剩下的部分。 – Procra

回答

3

Stringrange(of:...)方法具有.backwards選項 找到字符串的最後出現。 然後substring(to:)substring(from:)可以與 下/上界該範圍的被用來提取字符串 的前述部件/以下隔板:

func parseTuple(from string: String) -> (String, Int)? { 

    if let theRange = string.range(of: "###", options: .backwards), 
     let i = Int(string.substring(from: theRange.upperBound)) { 
     return (string.substring(to: theRange.lowerBound), i) 
    } else { 
     return nil 
    } 
} 

實施例:

if let tuple = parseTuple(from: "Connect###Four###Player###7") { 
    print(tuple) 
    // ("Connect###Four###Player", 7) 
} 
+0

測試。請稍等... – Procra

+0

流暢地運作:)。謝謝。 – Procra

0
let input = "Connect###Four###Player###7" 

let seperator = "###" 
// split components 
var components = input.components(separatedBy: seperator) 
// remove the last component ... 
components = Array(components.dropLast()) 
// ... and re-join the remaining ones 
let output = components.joined(separator: seperator) 

print(output) 

打印:

Connect###Four###Player 
+0

我忽視了你想保留最後一個組件。 – shallowThought