2013-06-03 21 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