Вы можете попробовать это, но дело ANDFERDINAND
не может быть обработано.Для этого регулярное выражение не подходит, потому что нет простого критерия, где следует разделять.
String str2 = str1
.replaceAll("([0-9])(?=[A-Z])", "$1 ") //1
.replaceAll("\\bAND\\b", "&") //2
.replaceAll("\\bOR\\b", "|") //3
.replaceAll("(?<![=<>!])=(?!=)", "==") //4
.replaceAll("<>", "!=") //5
.replaceAll("(?<=[^&| ])(==|!=|&|\\)|\\|)", " $1") //6
.replaceAll("(==|!=|&|\\(|\\)|\\|)(?=[^ &|])", "$1 "); //7
Сначала отделяйте число, за которым следует символ слова (положительный взгляд вперед).
Второйтретий заменитель AND
и OR
на границах слова.
четвертый заменитель =
, если он не является частью ==
, !=
, <=
или >=
(негативный взгляддо и отрицательный взгляд вперед).
Пятая замена <>
(одно простое совпадение).
Шестое и седьмое делают это ==
, !=
, &
, (
, )
и |
окружены пробелами, но не добавляют пробелы в начале или конце строки.Они будут заменены только в том случае, если за ними непосредственно не предшествует или не следует &
или |
.
Я сделал это только для заглавных букв.Вы можете легко адаптироваться, если вы также должны обрабатывать строчные буквы.