2017-07-03 1 views
1

Ziel: Eine Zeichenfolge mit einem integrierten Trennzeichen soll in eine int-Zeichenfolge und eine andere Zeichenfolge aufgeteilt werden. Falls die Trennzeichenfolge '###' mehr als einmal auftritt, soll die Zeichenkette immer am letzten '###' gespleißt werden.So teilen Sie eine Zeichenfolge beim letzten Auftreten einer Sequenz

Gibt es einen Operator wie string.lastIndexOf ("###"), wie in C#? Diese

ist, wie mein Parser wie folgt aussieht:

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

Können Sie ein beispiel eingang und ausgang? –

+0

Connect ### Four ### Player ### 7 sollte zu einem String "Connect ### Four ### Player" und zu einem int 7 geparst werden. Also egal wie viele '###' es gibt, die Funktion soll immer die letzte spalten und die restliche auslassen. – Procra

Antwort

3

Die range(of:...) Methode der String hat eine .backwards Option das letzte Vorkommen einer Zeichenfolge zu finden. Dann substring(to:) und substring(from:) können mit der unteren/oberen Grenze dieses Bereichs verwendet werden, um die Teile der Zeichenfolge zu extrahieren vorhergehenden/folgenden Abscheider:

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 
    } 
} 

Beispiel:

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

Testen. Bitte warten ... – Procra

+0

Funktioniert flüssig :). Vielen Dank. – 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) 

druckt:

Connect###Four###Player 
+0

Ich habe übersehen, dass Sie die letzte Komponente behalten wollen. – shallowThought

Verwandte Themen