2015-02-16 17 views
5

Java'da yaptığım gibi Swift'de basit bir String Tokenizer yapıyorum ... ama gerçekten benim için çalışmıyor.Virgül ve Çizgi Delimiter ile Tokenize Nasıl Doldurulur

Veri kaynağımdaki her satırın sonu "^" ile sınırlandı ve veriler virgülle ayrıldı.

Örneğin

: "dizesi 1, dize 2, dize 3, ^, dize 1, dize 2, dize 3, ^" Bu ... Java ne yapacağını olduğunu

(sadece istiyorum her veri serisindeki ilk iki dizeleri)

 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(); 
     } 

birisi o olur gerçekten yararlı bana doğru yönde işaret olsaydı. Swift: Split a String into an array

ve bu:

Ben bu baktım http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer

ama gerçekten Swift String tokenizing diğer kaynakları bulmak mümkün değil. Teşekkürler!

cevap

5

Bu Syed adlı componentsSeperatedByString cevabı uzanır ama istenen nX2 matris oluşturmak için Swift'in harita ile. cevap için

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 teşekkürler! Ben senin mantığını denedim arkasındaki mantık çok anlayışlı ... Ben bir 2D dizi yapmak için asla düşünmemiştim ... ama 2B dizisinden değerleri aldığımda ... "println (tokens [1] [0 ]) "1. satırdır. 0'dır. ancak ilk"^"sınırlayıcısını işaret eder ... ve dizi bunun yeni satırdaki ilk girdi olduğunu düşünür ... ve ayrıca konsola boş yazdırır. İdeal olarak "println (tokens [1] [0]) 'ı" string 1 "(satır 2) yazdırmak istiyorum, ancak konsolda boş bırakılır. Ama yine de ... Tekrar teşekkürler. Çok takdir !!! – stepheaw