Удалить все управляющие символы из строки Java - PullRequest
15 голосов
/ 30 января 2012

У меня есть строка из пользовательского интерфейса, которая содержит управляющие символы, такие как перевод строки и возврат каретки.

Я хотел бы сделать что-то вроде этого:

String input = uiString.replaceAll(<regex for all control characters> , "")

Конечно, этобыло сделано раньше!?

Ответы [ 4 ]

24 голосов
/ 30 января 2012

Использование Guava , возможно, более эффективно, чем использование полного движка регулярных выражений, и, конечно, более читабельно ...

return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);

С другой стороны, просто с помощью регулярных выражений, хотя и не так легко читаемо или эффективно ...

return string.replaceAll("\\p{Cntrl}", "");
15 голосов
/ 31 января 2012

Примерно так должно получиться:

String newString = oldString.replaceAll("[\u0000-\u001f]", "");
4 голосов
/ 21 июля 2018

Чтобы удалить только управляющие символы ASCII, используйте класс символов Cntrl

String newString = string.replaceAll("\\p{Cntrl}", "");

Чтобы удалить все 65 символов, которые Unicode называет «управляющими символами», используйте класс символов Cntrl в режиме UNICODE_CHARACTER_CLASS с флагом (?U):

String newString = string.replaceAll("(?U)\\p{Cntrl}", "");

Для дополнительного удаления символов «форматирования» в юникоде - например, управляющие символы для перевода текста справа налево или мягкий дефис - также можно обнулить класс символов Cf:

String newString = string.replaceAll("(?U)\\p{Cntrl}|\\p{Gc=Cf}", "");
1 голос
/ 02 декабря 2018

Гуава CharMatcher.JAVA_ISO_CONTROL устарела, используйте javaIsoControl () вместо:

CharMatcher.javaIsoControl().removeFrom(string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...