2013-06-03 34 views
6

Tôi gặp sự cố với một mã Scala nhất định, nơi tôi tìm thấy dòng phân tách này. Trước khi tôi chỉ sử dụng các dòng phân tách như:Đường phân tách này trong Scala có nghĩa là gì?

var newLine = line.split(",") 

Nhưng điều này có nghĩa là gì?

var newLine2 = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)") 

Dòng Tôi cần phải tách trông như thế này:

1966, "Green, Green Grass of Home", Tom Jones, 850000 

Cảm ơn trước!

+1

Ngoài cú pháp khai báo 'val name = expression', đây không phải là điều Scala. Phương thức 'split' được định nghĩa trên' java.lang.String': http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) –

Trả lời

11

Chuỗi bên trong phương pháp phân chia định nghĩa một regular expression. Nhóm (?=([^\"]*\"[^\"]*\")*[^\"]*$)positive lookahead assertion. Điều đó có nghĩa là chia nhỏ trên dấu phẩy, nhưng chỉ khi mẫu ([^\"]*\"[^\"]*\")*[^\"]*$ đang theo dấu phẩy.

([^\"]*  # a series of non double quote characters 
    \"  # a double quote 
    [^\"]* # a series of non double quote characters 
\")   # a double quote 
*   # repeat that whole group 0 or more times 
[^\"]*$  # a series of non double quote characters till the end of the string 

đó có nghĩa là nó sẽ chỉ chia trên dấu phẩy, khi có một khoản tiền tương đương của dấu ngoặc kép sau dấu phẩy, vì vậy nói cách khác, chia chỉ khi dấu phẩy không phải là bên trong dấu ngoặc kép. (Điều này sẽ làm việc miễn là chỉ có các cặp dấu ngoặc kép trong chuỗi.)

+0

cảm ơn câu trả lời nhanh chóng không hữu ích của bạn! :) bây giờ nó có ý nghĩa. – amko23

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