Если вы используете guava в своем проекте (а если нет, то я считаю, что вы должны это учитывать), класс CharMatcher прекрасно справится с этим:
Ваш первый пример может быть:
result = CharMatcher.WHITESPACE.removeFrom(dirtyString);
, в то время как ваш второй может быть:
result = CharMatcher.anyOf(" *#&").removeFrom(dirtyString);
// or alternatively
result = CharMatcher.noneOf(" *#&").retainFrom(dirtyString);
или если вы хотите быть более гибкими с пробелами (табуляции и т. Д.), Выможете комбинировать их, а не писать свои собственные:
CharMatcher illegal = CharMatcher.WHITESPACE.or(CharMatcher.anyOf("*#&"));
result = illegal.removeFrom(dirtyString);
или вместо этого вы можете указать допустимые символы, которые в зависимости от ваших требований могут быть:
CharMatcher legal = CharMatcher.JAVA_LETTER; // based on Unicode char class
CharMatcher legal = CharMatcher.ASCII.and(CharMatcher.JAVA_LETTER); // only letters which are also ASCII, as your examples
CharMatcher legal = CharMatcher.inRange('a', 'z'); // lowercase only
CharMatcher legal = CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')); // either case
, за которыми следует retainFrom(dirtyString)
, как указано выше.
Очень хороший, мощный API.