Я хочу разделить следующую строку, которая принимает форму
val str = "X|blnk_1|blnk_2|blnk_3|blnk_4|time1|time2|blnk_5|blnk_6|blnk_7|blnk_8| |Z01|Str1|01|001|NE]|[HEX1|HEX2]|[NA|001:1000|123:456|[00]|]|Z01|Str2|02|002|NE]|[HEX3|HEX4]|[NA|002:1001|234:456|[01]|]|Z02|02|z2|Str|Str|"
Эта строка всегда начинается с X и позиции разделения Z01, Z02, ..., Z0D
str.split("""\|Z0[1|2|3|4|5|6|7|8|9|A|B|C|D]{1}\|""") foreach println
Здесь не может быть упорядочения позиции Z01, ..., Z0D появляются в строке.
Разделение дает желаемый результат:
X|blnk_1|blnk_2|blnk_3|blnk_4|time1|time2|blnk_5|blnk_6|blnk_7|blnk_8|
Str1|01|001|NE]|[HEX1|HEX2]|[NA|001:1000|123:456|[00]|]
Str2|02|002|NE]|[HEX3|HEX4]|[NA|002:1001|234:456|[01]|]
02|z2|Str|Str|
Однако я хочу отобразить X, Z01, ... к классам дел.Поскольку нет упорядочения, нет способа определить, какой класс дел нужно сопоставить (нельзя использовать длину отдельных разбиений).
Я ожидаю, что у моего разделения будет следующий вывод:
X|blnk_1|blnk_2|blnk_3|blnk_4|time1|time2|blnk_5|blnk_6|blnk_7|blnk_8|
Z01|[Str1|01|001|NE]|[HEX1|HEX2]|[NA|001:1000|123:456|[00]|]|
Z01|[Str2|02|002|NE]|[HEX3|HEX4]|[NA|002:1001|234:456|[01]|]|
Z01|02|z2|Str|Str|
, чтобы результат можно было сопоставить с классом дел с помощью предварительно добавленного шаблона.
Например:
case class X( ....)
case class Z01(val1: String, val2: String, val3: String)
case class Z02(val1: Int, val2: String, val3: String,val4:String)
.................
X|blnk_1|blnk_2|blnk_3|blnk_4|time1|time2|blnk_5|blnk_6|blnk_7|blnk_8|
отображается на case class X
иZ01|[Str1|01|001|NE]|[HEX1|HEX2]|[NA|001:1000|123:456|[00]|]|
сопоставляется с классом дел Z01
, и в результате результат должен быть в виде упорядоченных и подобных групп, которые должны быть взяты в качестве массива конкретного класса дел.
X
Array[Z01]
Array[Z02]
......
......