2015-02-16 24 views
5

Tôi đang tạo một Trình mã hóa chuỗi đơn giản trong Swift giống như trong Java ... nhưng nó thực sự không hoạt động đối với tôi.Cách mã hóa chuỗi bằng dấu phẩy và dấu phân tách dòng

Kết thúc mỗi dòng trong nguồn dữ liệu của tôi được phân tách bằng dấu "^" và dữ liệu được phân tách bằng dấu phẩy.

Ví dụ: "chuỗi 1, chuỗi 2, chuỗi 3, ^, chuỗi 1, chuỗi 2, chuỗi 3, ^"

Đây là những gì tôi sẽ làm trong Java ... (Tôi chỉ muốn hai chuỗi đầu tiên trong mỗi dòng dữ liệu)

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

Nếu ai đó có thể chỉ cho tôi đúng hướng thực sự hữu ích.

tôi đã xem xét điều này: Swift: Split a String into an array

và điều này: http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer

nhưng tôi thực sự không thể tìm thấy các nguồn lực khác trên chuỗi tokenizing trong Swift. Cảm ơn!

Trả lời

5

Điều này mở rộng bản đồ của Syed để tạo ma trận Nx2 được yêu cầu.

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 cảm ơn cho câu trả lời! Tôi đã thử mã của bạn logic đằng sau nó là rất sâu sắc ... Tôi sẽ không bao giờ nghĩ để làm cho một mảng 2D ... nhưng khi tôi nhận được các giá trị từ mảng 2D ... "println (mã thông báo [1] [0 ]) "là Line 1..string 0 .. nhưng trỏ đến dấu phân tách"^"đầu tiên ... và mảng cho rằng đây là mục nhập đầu tiên trong dòng mới ... và nó cũng in trống trong bảng điều khiển. Lý tưởng nhất là tôi muốn "println (mã thông báo [1] [0])" để in "chuỗi 1" (của dòng 2) nhưng nó trống trong bảng điều khiển. Nhưng dù sao ... Cảm ơn một lần nữa. Nhiều đánh giá cao!!! – stepheaw

Các vấn đề liên quan