Для точного разбиения вы можете использовать #\\$&
, чтобы соответствовать всем 3 символам, где знак доллара должен быть экранирован, а саму обратную косую черту sh также нужно экранировать.
val s1= "dog#$&cat#$&cow#$&snak"
val s2= s1.split("#\\$&")
Выходные данные
s2: Array[String] = Array(dog, cat, cow, snak)
Более широкий шаблон мог бы использовать \\W+
для совпадения 1+ раз с любым символом, кроме символа слова.