Удалить все управляющие символы из строки Java

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

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

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

Наверняка это было сделано раньше !?

Ответ 1

Что-то вроде этого должно сделать трюк:

String newString = oldString.replaceAll("[\u0000-\u001f]", "");

Ответ 2

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

return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);

Альтернативно, просто используя регулярные выражения, хотя и не так хорошо или эффективно...

return string.replaceAll("\\p{Cntrl}", "");

Ответ 3

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

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

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

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

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

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

Ответ 4

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

CharMatcher.javaIsoControl().removeFrom(string);