2015-02-16 4 views
5

मैं स्विफ्ट में एक सरल स्ट्रिंग टोकनाइज़र बना रहा हूं जैसे कि मैं जावा में ... लेकिन यह वास्तव में मेरे लिए काम नहीं कर रहा है।कॉमा और लाइन डिलीमीटर के साथ टोकननाइज़िंग स्ट्रिंग कैसे करें

"^" के साथ सीमित मेरे डेटा स्रोत में प्रत्येक पंक्ति का अंत और डेटा को अल्पविराम से अलग किया जाता है।

उदाहरण के लिए: "स्ट्रिंग 1, स्ट्रिंग 2, स्ट्रिंग 3, ^, स्ट्रिंग 1, स्ट्रिंग 2, स्ट्रिंग 3, ^"

यह मैं जावा में क्या करेंगे ... (मैं केवल चाहते हैं डेटा की प्रत्येक पंक्ति में पहले दो तार)

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

कोई सही दिशा है कि वास्तव में सहायक होगा में मुझे बात कर सकता है।

मैं इस देखा है: Swift: Split a String into an array

और इस: http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer

लेकिन मैं वास्तव में स्विफ्ट में स्ट्रिंग Tokenizing पर अन्य संसाधनों पा सकते हैं। धन्यवाद!

उत्तर

5

यह सैयद के componentsSeperatedByString जवाब फैली लेकिन अनुरोध किया NX2 मैट्रिक्स बनाने के लिए स्विफ्ट के नक्शे के साथ। प्रतिक्रिया के लिए

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

अरे धन्यवाद! मैंने आपके कोड को आजमाया है कि इसके पीछे तर्क बहुत अंतर्दृष्टिपूर्ण है ... मैंने कभी भी 2 डी सरणी बनाने का विचार नहीं किया होगा ... लेकिन जब मुझे 2 डी सरणी से मान मिलते हैं ... "println (टोकन [1] [0 ]) "रेखा 1. है। 0 0 .. लेकिन पहले"^"डेलीमीटर के लिए इंगित करता है ... और सरणी सोचती है कि यह नई पंक्ति में पहली प्रविष्टि है ... और यह कंसोल में भी खाली प्रिंट करता है। आदर्श रूप में मैं "स्ट्रिंग 1" (लाइन 2 के) प्रिंट करने के लिए "println (टोकन [1] [0])" चाहता हूं लेकिन यह कंसोल में खाली है। लेकिन वैसे भी ... फिर से धन्यवाद। बहुत सराहना की!!! – stepheaw

संबंधित मुद्दे