我有一个特定的Scala代码,我发现这个分割线的问题。以前我只用分割线,如:Scala中的这条分界线是什么意思?
var newLine = line.split(",")
,这是什么意思分裂?
var newLine2 = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")
我需要分割线是这样的:
1966, "Green, Green Grass of Home", Tom Jones, 850000
提前感谢!
我有一个特定的Scala代码,我发现这个分割线的问题。以前我只用分割线,如:Scala中的这条分界线是什么意思?
var newLine = line.split(",")
,这是什么意思分裂?
var newLine2 = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")
我需要分割线是这样的:
1966, "Green, Green Grass of Home", Tom Jones, 850000
提前感谢!
分割方法内的字符串定义一个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
这意味着它仅将在逗号分割,当有双引号的逗号以下等量,所以换句话说,只有分裂如果逗号不是双引号内部。 (只要字符串中只有一对引号就可以工作。)
感谢您的快速和有益的答案! :)现在它是有道理的。 – amko23
除了声明语法'val name = expression',这不是Scala的东西。 'split'方法在'java.lang.String'上定义:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) –