Ответ 1
Отредактировано на основе вашего обновления:
dirtyString.replaceAll("[^a-zA-Z0-9]","")
В принципе, мне интересно, есть ли удобный класс или метод для фильтрации String для нежелательных символов. Результатом метода должен быть "очищенная" строка. То есть:
String dirtyString = "This contains spaces which are not allowed"
String result = cleaner.getCleanedString(dirtyString);
Ожидаемый результат:
"Thiscontainsspaceswhicharenotallowed"
Лучший пример:
String reallyDirty = " this*is#a*&very_dirty&String"
String result = cleaner.getCleanedString(dirtyString);
Я ожидаю, что результатом будет:
"thisisaverydirtyString"
Потому что я позволяю уборщику знать, что '', '*', '#', '&' и '_' - грязные символы. Я могу решить эту проблему, используя массив белых/черных списков символов. Но я не хочу изобретать колесо.
Мне было интересно, есть ли такая вещь, которая может "чистить" строки с помощью регулярного выражения. Вместо того, чтобы писать это сам.
Дополнение: Если вы считаете, что очистка струны может быть выполнена по-другому/лучше, я тоже все уши.
Другое дополнение: - Это не только для пространств, но и для любого характера.
Отредактировано на основе вашего обновления:
dirtyString.replaceAll("[^a-zA-Z0-9]","")
Если вы используете 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.
Используйте replaceAll
.
Это будет сделано:
String dirtyString = "This contains spaces which are not allowed";
String result = dirtyString.replaceAll("\\s", "");
и работает, заменив все пробелы "ничего".
String resultString = subjectString.replaceAll("\\P{L}+", "");
заменит любые небуквенные символы ничем.