У меня есть Java строк, которые являются логическими выражениями со скобками, &
, |
и !
в качестве операторов, и я хочу разбить их на токены. Например:
((!A1)&(B2|C3))
должно стать "(","(","!","A1",")","&","(","B2","|","C3",")",")"
После этого ответа Я обнаружил, что могу использовать Java s String.split()
с регулярным выражением, которое включает предложения lookahead и lookbehind:
List<String> tokens = "((!A1)&(B2|C3))".split("((?<=[!&()|])|(?=[!&()|]))")
Моя единственная проблема состоит в том, что в список токенов будут включены пробелы. Например, если бы я записал выражение как ( ( !A1 ) & ( B2 | C3 ) )
, тогда мой split()
произвел бы по крайней мере четыре строки, такие как " "
, и вокруг моих переменных было бы отступ (например, " A1 "
).
Как я могу изменить это выражение split
и регулярное выражение, чтобы токенизировать строку, но не сохранять пробелы?