Стоит ли использовать lex? Это зависит от сложности вашего языка. Это очень мощный инструмент, который стоит понять (особенно с yacc, или в Java вы можете использовать antlr или javacc ).
public String[] split(String regex)
принимает регулярное выражение, а не просто строку. Вы можете использовать регулярное выражение "!? =", Что означает ноль или один !
, за которым следует =
. Но проблема с использованием split заключается в том, что он не скажет вам, каким был фактический разделитель.
Из-за того, что у нас мало информации о вашем приложении, я бы соблазнился использовать регулярные выражения. Здесь много экспертов по stackoverflow, чтобы помочь. Отличное место для начала - учебник по регулярным выражениям Java .
(Спасибо Falle1234 за обнаружение моей ошибки - теперь исправлено.)