Ответ 1
Что-то вроде этого должно сделать трюк:
String newString = oldString.replaceAll("[\u0000-\u001f]", "");
У меня есть строка, исходящая из пользовательского интерфейса, который содержит управляющие символы, такие как линейные каналы и возвраты.
Я хотел бы сделать что-то вроде этого:
String input = uiString.replaceAll(<regex for all control characters> , "")
Наверняка это было сделано раньше !?
Что-то вроде этого должно сделать трюк:
String newString = oldString.replaceAll("[\u0000-\u001f]", "");
Использование Guava, возможно, более эффективно, чем использование полного механизма регулярных выражений, и, конечно, более читаемый...
return CharMatcher.JAVA_ISO_CONTROL.removeFrom(string);
Альтернативно, просто используя регулярные выражения, хотя и не так хорошо или эффективно...
return string.replaceAll("\\p{Cntrl}", "");
Чтобы удалить только управляющие символы 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}", "");
Guava CharMatcher.JAVA_ISO_CONTROL устарел, вместо этого используйте javaIsoControl():
CharMatcher.javaIsoControl().removeFrom(string);