Извините, что (невероятно) опоздал на вечеринку, но вот мое решение:
String str = "5*10/2+cos(54/90)", regex = "(\\+|-)(?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$)";
Pattern pat = Pattern.compile(regex);
Matcher m = pat.matcher(str);
String r = "";
if(m.find())
{
r = m.group(1).equals("+")?"-":"+";
}
str = str.replaceAll(regex, r);
System.out.println(str);
Я использую BlueJ в качестве IDE, кстати.
Вот живая демонстрация:https://regex101.com/r/3EM9Ix/1
ОБЪЯСНЕНИЕ
(\\+|-)
выбирает требуемый оператор, '+' или '-' (?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$)
- это регулярное выражение, которое проверяет, следует ли за оператором либофункция, в которой есть буквы или просто несколько цифр