Я не уверен, что понимаю ваши вопросы.Если вы можете сформулировать это лучше, я думаю, что простая замена регулярного выражения может быть всем, что вам нужно.
String r = s.replaceAll(REGEX, "X");
REGEX зависит от того, что вам нужно:
"\\*|#|~" : matches only '*', "#', and '~'
"[^\\d\\w]" : matches anything that is neither a digit nor a word character
"\\[.\\]" : matches '[' followed by ANY character followed by ']'
"(?<=\\[).(?=\\])" : matches only the character surrounded by '[' and ']'