Используйте регулярное выражение. String.replaceAll()
поддерживает регулярные выражения, поэтому вы можете решить эту проблему одним вызовом. Только будьте осторожны: некоторые из этих символов также являются специальными для регулярных выражений, поэтому их нужно экранировать «дважды»:
str.replaceAll("([-\\&\\|!\\(\\)\\{\\}\\[\\]\\^\\"~\\*\\?:\\])", "\\$1");
(я не пробовал это, возможно, эта строка нуждается в исправлениях, но это идея)