Ваши требования не ясны. Все символы в Java String
являются символами Юникода, поэтому, если вы их удалите, вы останетесь с пустой строкой. Я предполагаю, что вы имеете в виду, что хотите удалить любые символы, отличные от ASCII, непечатаемые.
String clean = str.replaceAll("\\P{Print}", "");
Здесь \p{Print}
represents a POSIX character class для печатаемых символов ASCII, в то время как \P{Print}
является дополнением к этому классу. С этим выражением все символы, которые являются , а не печатаемыми ASCII, заменяются пустой строкой. (Дополнительный обратный слэш, потому что \
начинает управляющую последовательность в строковых литералов.)
По-видимому, все вводимые символы фактически ASCII символы, которые представляют для печати кодировку непечатаемых или не-ASCII символов. У Mongo не должно быть никаких проблем с этими строками, потому что они содержат только простые печатные символы ASCII.
Все это звучит немного подозрительно для меня. Я считаю, что данные действительно содержат непечатаемые и не-ASCII-символы, а другой компонент (например, фреймворк) заменяет их на печатное представление. В ваших простых тестах вы не можете перевести печатное представление обратно в исходную строку, поэтому вы ошибочно полагаете, что первое регулярное выражение не работает.
Это моя догадка, но если я неправильно понял ситуацию, и вам действительно нужно вырезать буквальные \xHH
экраны, вы можете сделать это со следующим регулярным выражением.
String clean = str.replaceAll("\\\\x\\p{XDigit}{2}", "");
Документация API для Pattern
класса делает хорошую работу со списком всех синтаксиса, поддерживаемых библиотекой регулярных выражений в Java. Для более подробной информации о том, что все синтаксис означает, я нашел Regular-Expressions.info site очень полезным.
Почему вы хотите удалить их? – jtahlborn
@jtahlborn, Mongo не может сериализовать эти значения – daydreamer