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

Смежные вопросы