2015-02-16 16 views
5

Sto creando un semplice token per le stringhe in Swift come farei in Java ... ma in realtà non funziona per me.Come tokenare stringa con virgole e delimitatore di riga

La fine di ogni riga nella mia origine dati delimitata da "^" e i dati sono separati da una virgola.

Ad esempio: "string 1, corda 2, corda 3, ^, stringa 1, corda 2, corda 3, ^"

Questo è quello che vorrei fare in Java ... (Voglio solo il prime due corde in ogni riga di dati)

 String delimeter = "^"; 
     StringTokenizer tokenizedString = new StringTokenizer(responseString,delimeter); 

     String [] stringArray = new String [tokenizedString.countTokens()]; 
     StringTokenizer tokenizedAgain; 
     String str1; 
     String str2; 
     String token; 
     for(int i =0; i< stringArray.length; i ++) 
     { 

      token = tokenizedString.nextToken(); 
      tokenizedAgain = new StringTokenizer(token, ","); 
      tokenizedAgain.nextToken(); 
      str1 = tokenizedAgain.nextToken(); 
      str2 = tokenizedAgain.nextToken(); 
     } 

Se qualcuno mi potrebbe punto nella giusta direzione, che sarebbe davvero utile.

Ho guardato questo: Swift: Split a String into an array

e questo: http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer

ma non riesco davvero a trovare altre risorse sul String creazione di token a Swift. Grazie!

risposta

5

Questo estende risposta componentsSeperatedByString di Syed ma con la mappa di Swift per creare la matrice Nx2 richiesto.

let tokenizedString = "string 1, string 2, string 3, ^, string a, string b, string c, ^" 
let lines = tokenizedString.componentsSeparatedByString("^, ") 
let tokens = lines.map { 
    (var line) -> [String] in 
    let token = line.componentsSeparatedByString(", ") 
    return [token[0], token[1]] 
} 
println(tokens) 

enter image description here

0
var delimiter = "^" 
var tokenDelimiter = "," 
var newstr = "string 1, string 2, string 3, ^, string 1, string 2, string 3,^" 

var line = newstr.componentsSeparatedByString(delimiter) // splits into lines 
let nl = line.count 
var tokens = [[String]]() // declares a 2d string array 
for i in 0 ..< nl { 
    let x = line[i].componentsSeparatedByString(tokenDelimiter) // splits into tokens 
    tokens.append(x) 
} 

println(tokens[0][0]) 
+0

Hey grazie per la risposta! Ho provato il tuo codice, la logica dietro di esso è molto intuitiva ... non avrei mai pensato di creare un array 2D ... ma quando ottengo i valori dall'array 2D ... "println (token [1] [0 ]) "è Line 1..string 0 .. ma punta al primo delimitatore"^"... e l'array pensa che questa sia la prima voce nella nuova riga ... e stampa anche vuoto nella console. Idealmente mi piacerebbe "println (token [1] [0])" per stampare "string 1" (della riga 2) ma è vuoto nella console. Ma comunque ... Grazie ancora. Molto apprezzato!!! – stepheaw

Problemi correlati