2013-06-03 54 views
6

我有一個特定的Scala代碼,我發現這個分割線的問題。以前我只用分割線,如:Scala中的這條分界線是什麼意思?

var newLine = line.split(",") 

,這是什麼意思分裂?

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

我需要分割線是這樣的:

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

提前感謝!

+1

除了聲明語法'val name = expression',這不是Scala的東西。 'split'方法在'java.lang.String'上定義:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) –

回答

11

分割方法內的字符串定義一個regular expression。 該組(?=([^\"]*\"[^\"]*\")*[^\"]*$)positive lookahead assertion。這意味着以逗號分隔,但只有在([^\"]*\"[^\"]*\")*[^\"]*$之後的逗號之後。

([^\"]*  # 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 

這意味着它僅將在逗號分割,當有雙引號的逗號以下等量,所以換句話說,只有分裂如果逗號不是雙引號內部。 (只要字符串中只有一對引號就可以工作。)

+0

感謝您的快速和有益的答案! :)現在它是有道理的。 – amko23