как разделить строку с разделителем с неэкранированным символом разделителя

Я хочу разделить строку с разделителем (ex:|). Здесь моя проблема заключается в том, что строка содержит escape-символы. Как мне нужно удалить разделитель внутри символа побега.

Данные выглядят так:

null|123456|xxx12345|123|-11234|123|2000-01-01|XXX|01|0,000000000000|0,000000000000|0,000000000000|"AAA |AAA Data Group (AAA Inc)"|null|2000-01-01|null |нуль|хх

val delimit='|'
val inputData = 'null|123456|xxx12345|123|-11234|123|2000-01-01|XXX|01|0.000000000000|0.000000000000|0.000000000000|"AAA |AAA Data Group (AAA Inc)"|null|-|2000-01-01|-|null|null|xx'
inputData.split(delimit).map(x=>{println(x)})

Я ожидал результата:

null
123456
xxx12345
123
-11234
123
2000-01-01
XXX
01
0.000000000000
0.000000000000
0.000000000000
"AAA AAA Data Group (AAA Inc)"
null
2000-01-01
null
null
xx

но фактический вывод:\n

null
123456
xxx12345
123
-11234
123
2000-01-01
XXX
01
0.000000000000
0.000000000000
0.000000000000
"AAA 
AAA Data Group (AAA Inc)"
null
2000-01-01
null
null
xx

person Manoj Kumar Govindharaj    schedule 08.06.2019    source источник


Ответы (1)


split принимает регулярное выражение, поэтому вы можете использовать правильное регулярное выражение для разделения, только если | не находится внутри кавычек:

val inputData = """null|123456|xxx12345|123|-11234|123|2000-01-01|XXX|01|0.000000000000|0.000000000000|0.000000000000|"AAA |AAA Data Group (AAA Inc)"|null|-|2000-01-01|-|null|null|xx"""

inputData.split("\|(?=([^"]*"[^"]*")*[^"]*$)")

// Array(null, 123456, xxx12345, 123, -11234, 123, 2000-01-01, XXX, 01, 0.000000000000, 0.000000000000, 0.000000000000, "AAA |AAA Data Group (AAA Inc)", null, -, 2000-01-01, -, null, null, xx)

Я позаимствовал регулярное выражение из этого вопроса .

person Krzysztof Atłasik    schedule 08.06.2019